我在VMWare上运行了Ubuntu 12.10(内核3.9.0-rc2)安装。我给它512MB RAM
cat / proc / meminfo显示:
MemTotal:507864 KB
MemFree:440180
我想使用swap(出于某种原因)所以我写了一个C程序,它分配一个500MB的数组(使用malloc())并用垃圾填充它。但是,程序在填满整个阵列之前就会被杀死,并且屏幕上会出现“Killed”消息。
我想问一下这是否是正常行为,背后的原因是什么?在我看来,应该使用交换,因为自由RAM不足。
编辑:我没有提到我有1GB交换。 cat / proc / swaps显示:
/ dev / sda5大小:1046524使用:14672
当我运行记忆食物程序时,“使用”量会增加。但正如你所看到的,很多交换是剩下的。那么为什么该程序必须被“杀死”?
答案 0 :(得分:1)
所以我找不到有效的答案。我有一个临时解决方案:
我修改了虚拟机设置,为VM提供512MB RAM。现在我恢复到2GB并运行了5个并行程序,每个程序消耗500MB。值得庆幸的是,所有这些都运行并且交换被使用。
我只需要在交换管理中使用交换项目。
答案 1 :(得分:0)
如何编写C程序来分配内存以及编译器标志是什么也很重要。例如,如果您静态分配内存(例如双A [N] [N]),则行为与动态分配内存不同:(例如使用malloc / calloc)。静态分配受编译器的内存模型限制(中等,小等,通常可以指定)。或许,一个很好的起点是:
http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
这有帮助吗?