日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 内存分配层次以及memory primitives的基本用法

發布時間:2023/12/1 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 内存分配层次以及memory primitives的基本用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分配層次

C++ memory primitives

分配釋放類型是否可重載
mallocfree()C函數不可
newdeleteC++表達式不可
::operator new()::operator delete()C++函數
allocator::allocate()allocator::deallocate()C++標準庫可自由設計并以之搭配任何容器

分配與釋放的四個用法

1、malloc and delete

void* p1 = malloc(512); //512bytes free(p1);

2、new and delete

complex<int>* p2 = new complex<int>; //one object delete p2;

**3、::operator new() and ::operator delete() **

void* p3 = ::operator new(512); //512bytes,是個全局函數 ::operator delete(p3);

4、allocator::allocate() and allocator::deallocate()
allocator就是分配器的名稱,用的時候要告訴它用的每個單元是什么,例如這里我們給它int,這樣就形成了一個type(類型).
類型名稱(typename)后面加上小括號(),就形成了一個臨時對象(建立的對象沒有名稱,生命周期只在使用的這一行)
注意GNUC,后面兩種是GNUC4.9版以后的寫法。向標準規范對齊了。

//以下使用C++標準庫提供的allocators * //其接口具有標準規格,但是收到編譯器的影響,會有所不同。 #ifdef _MSC_VER//以下函數都是non-static,要通過object調用,以下分配3個ints.int* p4 = allocator<int>().allocate(3,(int*)10);allocator<int>().deallocate(p4,3); #endif #ifdef _BORLANDC_//以下函數都是non-static,要通過object調用,以下分配3個ints.int* p4 = allocator<int>().allocate(5);allocator<int>().deallocate(p4,5); #endif #ifdef _GNUC_//以下函數都是static,void* p4 = alloc::allocate(512);alloc::deallocate(p4,512);//以下兩函數都是 non-static,定要通過 object 調用。以下分配 7 個 ints. void* p4 = allocator<int>().allocate(7); allocator<int>().deallocate((int*)p4,7); //以下兩函數都是 non-static,定要通過 object 調用。以下分配 9 個 ints. void* p5 = __gnu_cxx::__pool_alloc<int>().allocate(9); __gnu_cxx::__pool_alloc<int>().deallocate((int*)p5,9); #endif

參考:

https://www.bilibili.com/video/BV1Kb411B7N8?p=3

總結

以上是生活随笔為你收集整理的C++ 内存分配层次以及memory primitives的基本用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。