【01】

 

 

分配 釋放 類屬 可否重載
malloc() free() C函數 不可
new delect C++表達式(expressions) 不可
::operator new() ::operator delect() C++函數
allocator<T>::allocate() allocator<T>::deallocate() C++ 標準庫 可自由設計並以之搭配任何容器

 

  • 部分使用代碼以及源碼

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

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

//*********************************
void* p3 = ::operator new(512);  //512 bytes
::operator delete(p3);

//*********************************

//以下使用C++標準庫提供的 allocators
//其接口雖有標準規格,但實現廠商並未完全遵守;
//下面三者形式略異

#ifdef _MSC_VER
	//以下兩函數都是 non-static,一定要通過object調用(常用匿名對象調用)
	//以下分配3個 ints 
	int* p4 = allocator<int>().allocate(3,(int*)0);  //申請時要標明類型,而且還要填入不知名的參數
	allocator<int>().deallocate(p4,3);    //釋放時要填入數量
#endif

#ifdef __BORLANDC__
	//以下兩函數都是 non-static,一定要通過object調用(常用匿名對象調用)
	//以下分配5個 ints 
	int* p4 = allocator<int>().allocate(5);  
	allocator<int>().deallocate(p4,5);
#endif

//2.9版本GUNC
#ifdef __GUNC__   
	//以下兩函數都是 static,可通過全名調用
	//以下分配 512 bytes 
	void* p4 = alloc::allocate(512);
	alloc::deallocate(p4,512);
#endif

//4.9版本GUNC
#ifdef __GUNC__   
	//以下兩函數都是 non-static,一定要通過object調用
	//以下分配 7 個ints 
	int* p4 = allocator<int>().allocate(7);  
	allocator<int>().deallocate((int*)p4,7);
	
	void* p5 = __gnu_cxx::__pool_alloc<int>().allocate(9);
	__gnu_cxx::__pool_alloc<int>().deallocate((int*)p5,9);
#endif

 

 

 

課程學習來源自:侯捷 《講解C++內存管理》

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章