我使用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。
答案 0 :(得分:3)
通常情况下,只有在写入内存后,操作系统才会实际分配内存。直到那时它还不需要并且如果你从不写信或只写一部分就可以节省很多。