我目前正在编写一个在各个地方分配内存的程序。我有兴趣了解当堆内存不足时我的程序的行为,即当 malloc() 返回 NULL 时。
是否有一个编译器选项可以让我将堆大小设置为非常小的值,这样我就可以立即看到发生了什么?我正在使用 gcc 编译器。
您可以像这样指定堆栈和堆大小:
gcc -Wl,--stack=xxxxx -Wl,--heap=yyyyy ...
至少如果在 Linux 上您可以ulimit -m <max mem>
在运行程序之前使用。
编译为 32 位并通过保留大块内存来耗尽虚拟地址空间(您不需要提交 - 只需保留(这些是 Windows 术语,我确信它们具有 Linux 等效项)。
Windows 也有可用于限制内存的作业对象,但这种简单的VirtualAlloc
技术可能会奏效。
关于它的好处是您可以动态更改限制,也许使用计时器,在随机时间一次又一次地对程序施加压力。
用您自己的代码替换malloc
&friends来模拟条件怎么样?我不确定最好的方法,也许LD_PRELOAD
会起作用(这里有一些示例代码)。