4

我目前正在编写一个在各个地方分配内存的程序。我有兴趣了解当堆内存不足时我的程序的行为,即当 malloc() 返回 NULL 时。

是否有一个编译器选项可以让我将堆大小设置为非常小的值,这样我就可以立即看到发生了什么?我正在使用 gcc 编译器。

4

4 回答 4

3

您可以像这样指定堆栈和堆大小:

gcc -Wl,--stack=xxxxx -Wl,--heap=yyyyy ...
于 2013-03-31T17:49:07.960 回答
2

至少如果在 Linux 上您可以ulimit -m <max mem>在运行程序之前使用。

于 2013-03-31T17:44:53.687 回答
1

编译为 32 位并通过保留大块内存来耗尽虚拟地址空间(您不需要提交 - 只需保留(这些是 Windows 术语,我确信它们具有 Linux 等效项)。

Windows 也有可用于限制内存的作业对象,但这种简单的VirtualAlloc技术可能会奏效。

关于它的好处是您可以动态更改限制,也许使用计时器,在随机时间一次又一次地对程序施加压力。

于 2013-03-31T17:45:11.673 回答
1

用您自己的代码替换malloc&friends来模拟条件怎么样?我不确定最好的方法,也许LD_PRELOAD会起作用(这里有一些示例代码)。

于 2013-03-31T17:47:01.247 回答