• _CrtMemBlockHeader


    typedef struct _CrtMemBlockHeader
    {
    // Pointer to the block allocated just before this one:
    struct _CrtMemBlockHeader *pBlockHeaderNext;
    // Pointer to the block allocated just after this one:
    struct _CrtMemBlockHeader *pBlockHeaderPrev;
    char *szFileName;  // File name
    int nLine;  // Line number
    size_t nDataSize;  // Size of user block
    int nBlockUse;  // Type of block
    long lRequest;  // Allocation number
    // Buffer just before (lower than) the user's memory:
    unsigned char gap[nNoMansLandSize];
    } _CrtMemBlockHeader;

    结构中的_CrtMemBlockHeader结构两个指针就不用解释是干嘛的了,szFileName是存储的发起分配操作的那行代码所在的文件的路径和名称,而nLine则是行号。nDataSize是请求分配的大小,我们的例子里当然就是10了,nBlockUse是类型,而lRequest是请求号。最后一项gap,又称NoMansLand,是4byte(nNoMansLandSize=4)大小的一段区域,注意看最后几行注释就明白了,在这个结构后面跟的是用户真正需要的10byte数据区域,而其后还跟了一个4byte的Gap,那么也就是说用户申请分配的区域是被一个头结构,和一个4byte的gap包起来的。在释放这10byte空间的时候,会检查这些信息。Gap被分配之后会被以0xFD填充。检查中如果gap中的值变化了,就会以Assert fail的方式报错。

    本文由博主(YinaPan)原创或者转载,如若转载请务必注明出处,谢谢合作!
  • 相关阅读:
    4. Android框架和工具之 android-async-http
    3. Android框架和工具之 xUtils(BitmapUtils)
    自定义多列排序:C++/Java实现
    Java套接字
    Java泛型
    线程同步之生产者消费者
    面向对象之深复制与浅复制
    谈谈多线程
    递归与尾递归
    单例模式:Instance
  • 原文地址:https://www.cnblogs.com/YinaPan/p/4012692.html
Copyright © 2020-2023  润新知