C++内存管理(候捷)第二讲 笔记

VC6 malloc

在这里插入图片描述
cookie一定占用8个字节。上下各4个字节
Cookie 是一小段额外的标识信息,用于在边界检查中检测缓冲区溢出。它通常是一个特殊的值,放置在分配的内存块的开始位置。记录内存分配出去的大小
Debug Header 包含一些调试信息,例如分配的文件名、行号等。这些信息用于调试和跟踪内存分配的源
block size 分配的实际数据块
Debug Tail 包含与调试信息相关的尾部数据
pad 对齐填充

VC6标准分配器之实现

在这里插入图片描述
VC6标准分配器里面的allocate和deallocate的实现只是调用::operator new 和::operator delete, 没有任何特殊设计。底层是malloc和free

BC5标准分配器之实现

在这里插入图片描述
Borland5 编译器只是调用::operator new 和::operator delete, 没有任何特殊设计

G2 9标准分配器之实现

在这里插入图片描述
allocate和deallocate的实现也是调用::operator new 和::operator delete, 没有任何特殊设计
在这里插入图片描述
GNU C++2.9容器使用的分配器,不是std::allocator,而是std::alloc

G2.9 std::alloc VS G4.9 __pull_alloc

G2.9 std::alloc在G4.9中是 __pull_alloc

G4.9 __pull_alloc用例

G4.9版本中标准分配器std::allocator的实现,里面的allocate和deallocate的实现只是调用::operator new 和::operator delete, 没有任何特殊设计
在这里插入图片描述
__pull_alloc去除了cookie(一个元素带有上下两个cookie,共8B)。上图每个double相距8字节,下面的double相距10字节

G2.9 std::alloc

在这里插入图片描述
前文的Per class allocator每个类重载了operatpr new和operator delete。每个类单独维护一个链表

为了通用的将operator new的分配操作提取到alloc类。为了适应不同类的大小,std::alloc为所有的类维护16个链表,每

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值