vs如何对堆空间进行管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28110727/article/details/84329270
//释放空间是只需要执行断链操作,当某个堆空间被释放后,再次申请堆空间时会检查这个被释放的堆空间能够满足的用户要求.
如果能满足,则再次申请的堆空间的地址将会是刚释放过的堆空间地址
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 首地址

猜你喜欢

转载自blog.csdn.net/qq_28110727/article/details/84329270