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

时间:2012-04-21 20:30:59

标签: c memory-management malloc

当我的应用程序启动时,我正在使用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%。

2 个答案:

答案 0 :(得分:6)

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

来自malloc man page

  

默认情况下,Linux遵循乐观的内存分配策略。   这意味着当malloc()返回非NULL时,无法保证   内存确实可用。

答案 1 :(得分:2)

现代操作系统在分配时可能只返回虚拟内存地址,实际上并不指向内存块。只有在您想要使用它时才会“分配”。