1

我在 VMWare 上运行了 Ubuntu 12.10(内核 3.9.0-rc2)安装。我给了它 512MB RAM。
cat /proc/meminfo 显示:
MemTotal:507864 KB
MemFree:440180

我想使用交换(出于某种原因),所以我编写了一个 C 程序,它分配了一个 500MB 数组(使用 malloc())并用垃圾填充它。但是,程序在填满整个数组之前就被杀死了,屏幕上会出现一条消息“Killed”。

我想问这是否是正常行为,这背后的原因是什么?在我看来,应该使用交换,因为可用 RAM 不足。

编辑:我没有提到我有 1GB 交换。cat /proc/swaps 显示:
/dev/sda5 大小:1046524 已使用:14672
。当我运行消耗内存的程序时,“已使用”数量会增加。但是正如你所看到的,很多交换是剩余的。那么为什么程序必须被“杀死”呢?

4

2 回答 2

1

所以我找不到有效的答案。我有一个临时解决方案:

我修改了虚拟机设置,为 VM 提供 512MB RAM。现在我恢复到 2GB 并运行 5 个并行程序,每个程序消耗 500MB。值得庆幸的是,它们都运行并使用了交换。

我只需要将交换用于交换管理项目。

于 2013-03-27T19:03:14.123 回答
0

您如何编写 C 程序来分配内存以及编译器标志是什么也很重要。例如,如果您正在静态分配内存(例如 double A[N][N]),则行为与动态分配它不同:(例如使用 malloc/calloc)。静态分配受到编译器内存模型的限制(中型、小型等,通常可以指定)。也许,一个好的起点是:

http://en.wikipedia.org/wiki/C_dynamic_memory_allocation

这有帮助吗?

于 2013-03-28T01:17:57.423 回答