4

当我的应用程序启动时,我正在使用 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 人口,则内存使用量会增加,如果我保留它的注释,则使用量为 0%。

4

2 回答 2

6

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

malloc 手册页

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

于 2012-04-21T20:34:20.830 回答
2

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

于 2012-04-21T20:34:05.480 回答