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

malloc对RAM使用没有影响,为什么?,c,memory,malloc,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++) {

我已经使用
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;
}
执行程序前的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
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使用情况:

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
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。

通常操作系统只会在您写入内存后才实际分配内存。在这之前,如果您从不向它写入或只向它的一部分写入,它就不需要这样做,并且可以节省大量内存。

通常,操作系统只会在您向它写入后才实际分配内存。直到这个时候,它不需要,而且可以节省很多,如果你从来没有写信给它或只写信给它的一部分。< /P> A)C++或C?b) 了解strcpy是什么。c) 了解什么是免费的。D)你不是在写大部分的记忆,比如C++“你怎么做”从来没有写在任何地方。b) 了解strcpy是什么。c) 了解什么是免费的。d) 你的大部分记忆都没有写,例如,“你好”从来没有写过。@deviantfan,你是对的,我应该使用strcpy。这不是真的(对于所有OSs)。@Olaf JesperJuhl没有说它总是真的,是吗?“通常”…@deviantfan:他是隐式的。OP使用的是Ubuntu,这是Linux上的默认策略。它是可以改变的,是的,它可以在其他操作系统上有所不同,是的,但在这种情况下很可能是这样。从OP的结果可以推断,至少他的操作系统是这样。这不是真的(对于所有的操作系统)。@Olaf JesperJuhl没有说它总是正确的,是吗?“通常”…@deviantfan:他是隐式的。OP使用的是Ubuntu,这是Linux上的默认策略。它可以改变,是的,它可以在其他操作系统上有所不同,是的,但在这种情况下很可能是这样。从OP的结果可以推断,至少他的操作系统是这样做的。