STL中的内存分配方式——1

    技术2022-05-19  19

    开始看STL源码分析,最开始讲到allocator,然后侯捷模拟了两种内存分配方式,感觉挺不错的所以记录下来:

    1.       是分配一块新的内存空间 即:利用malloc或者new 来分配新的空间

    2.       在旧的空间上替换新的值 即:placement new

    例子:

    inline T* __allocator(ptrdiff_t size,T*) { set_new_handler(0); T* tmp=(T*)(::operator new(size*sizeof(T))); if(0==tmp) { cerr<<"out of memory"<<endl; } return tmp; } template<typename T,typename E> inline void __construct(T* p,E value) { new(p) T(value); }

    第一种利用 全局new 函数 实际上就是利用 calloc分配一块新的空间。

    第二种利用 placement new 实际上就是赋值,在以p开始的空间上 赋值为value.

    当然与之对应的就是释放空间了。

    1.      是释放掉内存空间 即:free 或者delete

    2.       调用析构函数析构掉对象,但是内存空间没有释放 即~T();

    例子:

    template<typename T> inline void __deallocate(T* buffer) { delete buffer; } template<typename T> inline void _destroy(T* ptr) { ptr->~T(); }

     

     

     


    最新回复(0)