-
primitives(基本工具)
-
对比
-
malloc,free
-
不可重载
-
c函数
-
-
new,delete
-
不可重载
-
C++表达式
-
-
::operator new(),::operator delete()
-
可重载
-
C++函数
-
-
allocator<T>::allocate(),allocator<T>::deallocate()
-
可自由设计并以之搭配任何容器
-
C++标准库
-
-
-
new
-
1.operator new(sizeof())
-
2.构造函数,注:自己使用时不能直接调用构造函数
-
-
delete
-
1.析构函数
-
2.operator delete(pc)
-
-
array new,array delete
-
new []
-
delete []
-
不加[]的影响
-
1.class内不带指针可能没影响
-
2.class内带指针会内存泄露
-
-
-
-
placement new
-
new(p)Complex(1,2)
-
1operator new(sizeof(Complex),p):不分配内存
-
2构造函数
-
-
-
重载
-
类外::oprator new/delete
-
类内oparator new/delete(本质是静态的)
-
-
Per-class allocator
-
重载类内oparator new/delete
-
operator new:内存池,每个单独的类内会多一根指针,链表
-
operator delete:将回收的内存加到自由链表的前端
-
-
static allocator
-
把内存分配的过程写到一个allocator类中,通用
-
-
macro for static allocator
-
static allocator 的宏版本
-
-
new handler
-
typedef void(*new_handler)()
-
new_handler set_new_handler(new_handler p) throw();
-
没有内存能被分配,不断调用
-
-
-
-
std::allocator
-
G2.9 std::alloc 运行模式
-
128bytes以内
-
free_list[16]:16条自由链表,第一条8字节开始,以后每条上的块多8字节,第n条,n=申请大小/8-1;
-
开辟内存时,内存池不够时,开辟20*该条链表上块大小+20*该条链表上块大小(内存池)+(RoundUp(累计量>>4)),有剩余时,从内存池,最多切20个(即使内存池容量充足)
-
申请时,内存池剩余连一块也满足不了,为碎片,先将其挂在大小符合的自由链表下,再开辟内存
-
当内存池不足,同时系统内存也不足时,alloc从手中资源最接近申请大小的自由链表中取出一块回填pool
-
一条链表上的一块,包含union,嵌入式指针,4个字节
-
-
大于128bytes
-
直接malloc
-
-
>>>>>>>(侯捷版笔记)
标签:管理,C++,链表,内存,operator,new,allocator,delete From: https://www.cnblogs.com/Zhaolongtao/p/17731476.html