| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 读书笔记:STL源码剖析之空间配置器 -> 正文阅读 |
|
[C++知识库]读书笔记:STL源码剖析之空间配置器 |
整个STL的操作对象(所有的数值)都存放在容器之内,而容器一定需要配置空间以置放资料。不先掌握空间配置器的原理,难免在阅读其它STL组件的实现时处处遇到挡路石。空间不一定是内存,空间也可以是磁盘或其它辅助存储介质。allocator可以写一个直接向硬盘取空间。
在STL中,容器的定义中都带有一个模板参数, 具备次配置力(sub- b-allocation)的SGI空间配置器 SGI标准空间配置器, std::allocator STL标准规格告诉我们,配置器定义于之中, SGI的memory内含以下两个文件:
空间配置与释放 第一级是对malloc/free简单的封装。 C++内存配置基本操作::operator new ,::operator delete相当于C的malloc()和free(),SGI正是使用malloc()和free()完成空间配置的。 而为了解决小型区块可能造成的内存破碎问题,alloc采用了第二级空间配置器。第二级空间配置器在分配大块内存(大于128bytes)时,会直接调用第一级空间配置器,而分配小于128bytes的内存时,则使用内存池跟free_list进行内存分配/管理。 空间配置函数 allocate() 空间释deallocate放函数(),身为一个配置器, default_alloc_template拥有配置器标准接口函数 deallocate()。该函数首先判断区块大小,大于128 8 bytes就调用第一级配置器,小于12 88 bytes就找出对应的 free list,将区块回收。 重新填充 free_lists STL定义五个全局函数作用于未初始化空间上,构造用的 construct()和析构用的 destroy()。其中uninitialized_fill( ), uninitialized_ copy, uninitialized_fill_n()使我们能够将内存的配置与对象的构造行为分离开来.具有“commit or rollback”语意:要么产生所有必要的元素,否则就不产生任何元素。 uninitialized_ copy (Input Iterator first, Inputiterator last, ForwardIterator result) uninitialized_fill( ):如果[first,last)范围内的每个迭代器都指向未初始化的内存,那么 uninitialized_fill( )会在该范围内产生x(式第三参数)的复制品。换句话说, uninitialized_fill_n( )会针对操作范围内的每个迭代器i,调用 construct(&*i,x),在i所指之处产生×的复制品。 uninitialized_fill_n():它会为指定范围内的所有元素设定相同的初值如果[first, first+n)]范围内的每一个迭代器都指向未初始化的内存,那么 uninitialized_fill_n()会调用 copy constructor,在该范围内产生(上式第三参数)的复制品。也就是说,面对first, first+n)范围内的每个迭代器i, uninitialized_fill_n()会调用 construct(&*i,x),在对应位置处产生的复制品。 来源:《STL源码剖析》 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 6:25:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |