free()如何知道其参数所指空间大小的?
如题
[解决办法]
你哪里看的能知道?
[解决办法]
malloc時記下來了
内存管理内幕
http://www.ibm.com/developerworks/cn/linux/l-memory/
[解决办法]
vc2005下:
typedef struct _CrtMemBlockHeader
{
struct _CrtMemBlockHeader * pBlockHeaderNext;
struct _CrtMemBlockHeader * pBlockHeaderPrev;
char * szFileName;
int nLine;
size_t nDataSize;
int nBlockUse;
long lRequest;
unsigned char gap[nNoMansLandSize];
/* followed by:
* unsigned char data[nDataSize];
* unsigned char anotherGap[nNoMansLandSize];
*/
} _CrtMemBlockHeader;
得到CrtMemBlockHeader头指针方法是:
#define pHdr(pbData) (((_CrtMemBlockHeader *)pbData)-1)
[解决办法]
在内存的分配中,每一个内存块都有自己的附带的信息,就像你去买一样东西上面有标签来说明品牌、生产日期等,操作系统不会把一个没有任何信息说明的内存给你,那样的话这个内存就脱离了操作系统的控制了。你申请的时候操作系统会标记这个是多大,你释放的时候系统会查看这个标记的。