malloc对RAM的使用没有影响,为什么?

时间:2016-07-02 10:17:30

标签: c memory malloc

我使用malloc使用以下程序动态分配1GB内存。

#include <malloc.h>
#include <stdio.h>

int main()
{
        int i;
        char **ptr = malloc(10000 * sizeof(char*));

        // Dynamically allocate 1GB of space
        for (i=0; i<10000; i++) {
                ptr[i] = malloc(1024 * 100 * sizeof(char));
                ptr[i] = "How do you do?";
                ptr[6888] = "How are you?";
        }

        // Print string at some random locations
        printf("%s\n", ptr[3688]);
        printf("%s\n", ptr[6888]);
        printf("%s\n", ptr[6889]);
        getchar();
        return 0;
}

输出:

jobin@gnome:~$ ./a.out 
How do you do?
How are you?
How do you do?

执行程序前的RAM使用情况:

jobin@gnome:~$ free -h
             total       used       free     shared    buffers     cached
Mem:          2.9G       2.0G       981M        16M        28M       569M
-/+ buffers/cache:       1.4G       1.5G
Swap:           0B         0B         0B

执行程序时的RAM使用情况:

jobin@gnome:~$ free -h
             total       used       free     shared    buffers     cached
Mem:          2.9G       2.0G       945M        16M        28M       569M
-/+ buffers/cache:       1.4G       1.5G
Swap:    

   0B         0B         0B

输出似乎很好。但我希望在执行程序时RAM的使用率应该高出1GB。但这似乎很正常。我不认为操作系统会对内存进行垃圾回收。如果操作系统释放了我已经分配的内存,我将无法获得输出并且可能在执行时出现分段错误。

注意:我使用的是ubuntu。

1 个答案:

答案 0 :(得分:3)

通常情况下,只有在写入内存后,操作系统才会实际分配内存。直到那时它还不需要并且如果你从不写信或只写一部分就可以节省很多。