gpt4 book ai didi

C malloc,仅在填充时使用内存

转载 作者:太空狗 更新时间:2023-10-29 15:22:32 26 4
gpt4 key购买 nike

我在应用程序启动时使用 malloc 分配了一些空间。如果我不填充此变量,top 将显示此应用程序使用的内存为 0%,但如果我开始填充此变量,top 将开始显示我填充此数组时 ram 使用量的增加。

所以我的问题是:顶部不应该将 malloc 分配的这个空间显示为我的应用程序的已用空间吗?为什么在我填充此变量时它只显示我的应用程序的 RAM 使用量增加?

我使用的是 Ubuntu 10.10 64 位。这是填充它的代码:

char pack(uint64_t list, char bits, uint64_t *list_compressed, char control, uint64_t *index){
uint64_t a, rest;

if(control == 0){
a = list;
}
else{
rest = list >> (64 - control);

a = (control == 64 ? list_compressed[*index] : list_compressed[*index] + (list << control));

if(control + bits >= 64){
control = control - 64;
//list_compressed[*index] = a;
(*index)++;
a = rest;
}
}

//list_compressed[*index] = a;
control = control + bits;

return control;
}

“malloqued”变量是 list_compressed。

如果我取消注释 list_compressed 填充,则 ram 使用量会增加,如果我保留注释,则使用量为 0%。

最佳答案

简短的回答,没有。在许多操作系统上,当您调用 malloc 时,它不会直接为您分配内存,而是仅在您访问它时才分配。

来自 malloc man page :

By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() returns non-NULL there is no guarantee that the memory really is available.

关于C malloc,仅在填充时使用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com