1. 程式人生 > >vs如何對堆空間進行管理

vs如何對堆空間進行管理

//釋放空間是隻需要執行斷鏈操作,當某個堆空間被釋放後,再次申請堆空間時會檢查這個被釋放的堆空間能夠滿足的使用者要求.
如果能滿足,則再次申請的堆空間的地址將會是剛釋放過的堆空間地址
typdef struct _CrtMemBlockHeader
{
		struct _CrtMemBlockHeader *pBlockHeaderNext;  //下一塊堆空間首地址(指向的是前一次申請的記憶體資訊)
		struct _CrtMemBlockHeader *pBlockHeaderPre;   //上一塊堆空間首地址(指向的是後一次申請的記憶體資訊)
		char *szFileName;
		int nLine;
		size_t nDataSize;                             //堆空間資料大小
		int nBlockSize;                               
		long lRequest;                                //堆申請的次數
		unsigned char gap[nNoMansLandSize];           //堆空間資料
}_CrtMemBlockHeader;

  char *p1 = (char*)malloc(10);
0x0141BAD8  ab ab ab ab  ????
0x0141BADC  ab ab ab ab  ????
0x0141BAE0  00 00 00 00  ....
0x0141BAE4  00 00 00 00  ....
0x0141BAE8  b9 c5 9b 15  ???.
0x0141BAEC  15 f5 00 1a  .?..  //下一個堆空間的地址
0x0141BAF0  58 64 41 01  XdA.  //上一個堆空間的地址
0x0141BAF4  00 00 00 00  ....
0x0141BAF8  00 00 00 00  ....
0x0141BAFC  00 00 00 00  ....
0x0141BB00  0a 00 00 00  ....  //堆資料的容量
0x0141BB04  01 00 00 00  ....
0x0141BB08  49 00 00 00  I...  //此空間第幾次申請
0x0141BB0C  fd fd fd fd  ????  //越界標誌 fdfdfdfd
0x0141BB10  cd cd cd cd  ????  //malloc 首地址