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的结果可以推断,至少他的操作系统是这样做的。