获取malloc宏的无关值-M_MMAP_THRESHOLD和M_ARENA_MAX
尝试在示例c程序中打印M_MMAP_THRESHOLD和M_ARENA_MAX的值:获取malloc宏的无关值-M_MMAP_THRESHOLD和M_ARENA_MAX,c,malloc,C,Malloc,尝试在示例c程序中打印M_MMAP_THRESHOLD和M_ARENA_MAX的值: if (mallopt(M_ARENA_MAX, 0) == 0) { printf("mallopt() 2 failed"); exit(EXIT_FAILURE); } if (mallopt(M_MMAP_THRESHOLD, 64) == 0) { printf("mallopt() 2 failed"); exit(EXIT_FA
if (mallopt(M_ARENA_MAX, 0) == 0) {
printf("mallopt() 2 failed");
exit(EXIT_FAILURE);
}
if (mallopt(M_MMAP_THRESHOLD, 64) == 0) {
printf("mallopt() 2 failed");
exit(EXIT_FAILURE);
}
p = malloc(1000);
if (p == NULL) {
fprintf(stderr, "malloc() failed");
exit(EXIT_FAILURE);
}
printf("Value for M_MMAP_MAX : %d \n",M_MMAP_MAX);
printf("Value for M_MMAP_THRESHOLD : %d \n",M_MMAP_THRESHOLD);
输出:
如果您可以建议-如何获取这些宏的值。宏是选择器:该值告诉mallopt要设置哪个选项。mallopt的定义仅稍微简化为:
int mallopt(int which, int value) {
int result = 0;
internal_lock_malloc_state();
switch (which) {
case M_MMAP_MAX:
result = internal_set_maximum_mmap(value);
break;
case M_MMAP_THRESHOLD:
result = internal_set_threshold(value);
break;
// ...
}
internal_unlock_malloc_state();
return result;
}
上面的内部函数可能实际上是写出来的,但在这里没有区别。重要的是,宏只是一个小整数,指示要修改哪个选项
不幸的是,从您的角度来看,没有办法检查这些选项的当前值。事实上,甚至不能保证存在当前值。例如,考虑一个从不使用MMAP的MALOC的实现,可能是因为主机系统没有实现内存映射。这样的实现可以相当合理地忽略设置这些选项的任何尝试,方法是替换内部设置。。。结果为1;的上述函数
简言之,如果您想查询malloc选项的当前值是什么,那么您需要记住最后一个设置为的值。除了阅读文档之外,没有办法获得默认值。说可以使用mallopt设置这些内核可调参数,那么如果设置了这些值,那么为什么不能使用direct print或gdb info宏获取新设置的值呢。尽管默认值是根据
int mallopt(int which, int value) {
int result = 0;
internal_lock_malloc_state();
switch (which) {
case M_MMAP_MAX:
result = internal_set_maximum_mmap(value);
break;
case M_MMAP_THRESHOLD:
result = internal_set_threshold(value);
break;
// ...
}
internal_unlock_malloc_state();
return result;
}