_C_Quickpool_Debug ()- 修改快速池内存管理器特征

格式

#include <stdlib.h>
_C_Quickpool_Debug_T _C_Quickpool_Debug(_C_Quickpool_Debug_T *newval);

语言级别

扩展

线程安全

描述

_C_Quickpool_Debug() 函数用于修改快速池内存管理器特征。 环境变量也可用于配置此支持 (参考部分 环境变量)。

_C_Quickpool_Debug() 的参数如下所示:

纽瓦尔
指向 _C_Quickpool_Debug_T 结构的指针。 该结构包含下列字段:
标志
指示要修改的特征的无符号整数值。 标志字段可以包含以下值 (可以在任何组合中使用):
_C_INIT_MALLOC
将所有已分配的存储器初始化为指定的值。
_C_INIT_FREE
将所有释放的存储器初始化为指定的值。
_C_COLLECT_STATS
收集有关快速池内存管理器的统计信息,以便与 _C_Quickpool_Report() 函数配合使用。
马洛卡瓦尔
用于初始化已分配内存的每个字节的 1 字节无符号字符值。 仅当指定了 _C_INIT_MALLOC 标志时,才会使用此字段。
自由值
用于初始化已释放内存的每个字节的 1 字节无符号字符值。 仅当指定了 _C_INIT_FREE 标志时,才会使用此字段。

如果 newval 的值为 NULL ,那么将返回包含当前快速池内存管理器特征的结构,并且不会修改任何快速池内存管理器特征。

返回值

返回值是在进行当前函数调用所请求的更改之前包含 _C_Quickpool_Debug() 值的结构。 此值可以在以后的调用中使用,以将 _C_Quickpool_Debug() 值复原到先前状态。

示例

以下示例将 _C_Quickpool_Debug()_C_INIT_MALLOC_C_INIT_FREE 标志配合使用,以初始化 mallocfree 函数上的内存。
#include <stdlib.h>
#include <stdio.h>
int main(void) {
  char *p;
  char *mtest = "AAAAAAAAAA";
  char *ftest = "BBBBBBBBBB";
  unsigned int cell_sizes[2]       = { 16, 64 };
  unsigned int cells_per_extent[2] = { 16, 16 };
  _C_Quickpool_Debug_T  dbgVals = { _C_INIT_MALLOC | _C_INIT_FREE, 'A', 'B' };

  if (_C_Quickpool_Init(2, cell_sizes, cells_per_extent)) {
    printf("Error initializing Quick Pool memory manager.\n");
    return -1;
  }

  _C_Quickpool_Debug(&dbgVals);

  if ((p = malloc(10)) == NULL) {
    printf("Error during malloc.\n");
    return -2;
  }
  if (memcmp(p, mtest, 10)) {
    printf("malloc test failed\n");
  }
  free(p);
  if (memcmp(p, ftest, 10)) {
    printf("free test failed\n");
  }
  printf("Test successful!\n");
  return 0;
}
/*****************Output should be similar to:*****************
Test successful!
*******************************************************************/

相关信息