比如 在程序某处往堆上申请了一些内存 ptype *p = malloc(n);
那么用free(p)释放时必须知道释放多少即n的值,这个n存在什么地方呢?猜测在堆上,但调试查看了p附近的内存没有发现n,无源汇编又看不下去,哪
位知道怎么实现的告诉一下谢谢!
这个是依赖于库函数的具体。
有的是放在p指向的前N个字节,N为1-4,依CPU字长、库函数具体实现所采用的缓冲策略等,会有所不同。另外还可能需要边界对齐。
这是vc debug模式下的_CrtMemBlockHeader的信息。
/*
* For diagnostic
purpose, blocks are allocated with extra information and
* stored
in a doubly-linked list. This makes all blocks registered with
*
how big they are, when they were allocated, and what they are used for.
*/
#define nNoMansLandSize 4
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;
release下可能是直接调用的windows的HeapAlloc和HeapFree。
博主注:以上各位CSDN高人研究之深入,叹为观止,膜拜学习。
阅读(1376) | 评论(0) | 转发(0) |