c语言环境变量配置不成功,c - 在C程序中为jemalloc设置MALLOC_CONF环境变量不起作用 - 堆栈内存溢出...

在C程序中尝试使用jemalloc并设置MALLOC_CONF环境变量以控制内存配置,但发现仅通过外部设置环境变量才能生效。当在程序内部使用`setenv()`设置该变量时,jemalloc的配置并未按预期工作。编译和运行程序时,如果不在外部设置MALLOC_CONF,jemalloc的内存统计和profiling功能不产生任何输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于某些原因我无法控制父进程,因此我尝试使用jemalloc进行内存配置,因此,除了在外部设置MALLOC_CONF env变量外,我尝试在程序内设置变量,但似乎无法正常工作。

我尝试过在外部设置MALLOC_CONF env,然后启动该过程。

以下是示例程序的代码段

void keep_mallocing(int count, size_t size, int **ptr) {

int i =0;

for(i=0; i

ptr[i] = malloc(size);

memset(ptr[i], 0, size);

}

}

void keep_freeing(int count, int **ptr) {

int i = 0;

for(i=0; i

free(ptr[i]);

}

}

void handle_sigusr1(int sig)

{

// malloc_stats_print(NULL, NULL, "g,l,b,h,m,a");

char *path = 0;

path = getenv( "MALLOC_CONF" );

printf("path : %s\n", path);

mallctl("prof.dump", NULL, NULL, NULL, 0);

return;

}

int

main(int argc, char **argv) {

signal(SIGUSR1, handle_sigusr1);

setenv("MALLOC_CONF", "prof:true,prof_prefix:jeprof.out", 1);

while(1)

{

int *ptr[10] = {0};

// count, bytes, ptr

keep_mallocing(10, 1000000, ptr);

sleep (1);

// count, ptr

keep_freeing(7, ptr);

sleep (5);

}

return 0;

}

我正在使用以下命令来编译代码(我已经尝试了静态和动态链接)

gcc -ggdb3 use_jemalloc.c -std=gnu99 -o abc /usr/local/lib/libjemalloc.a -lpthread -ldl -lm

如果我导出该变量然后运行,似乎工作正常

$ ls

abc use_jemalloc.c

$ export MALLOC_CONF="prof:true,prof_prefix:jeprof.out"

$ ./abc &

[1] 23220

$ kill -10 `pidof abc`

path : prof:true,prof_prefix:jeprof.out

$ ls

abc jeprof.out.23220.0.m0.heap use_jemalloc.c

但是,如果u使变量无效,则它不会生成任何东西

$ rm jeprof.*

$ ls

abc use_jemalloc.c

$ export MALLOC_CONF=

$ echo $MALLOC_CONF

$ ./abc &

[1] 23244

$ kill -10 `pidof abc`

path : prof:true,prof_prefix:jeprof.out

$ ls

abc use_jemalloc.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值