Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5174423
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类:

2010-07-18 23:00:47

比如 在程序某处往堆上申请了一些内存 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高人研究之深入,叹为观止,膜拜学习。
阅读(1370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~