当我们在Cortex M3上耗尽内存时会发生什么

时间:2013-06-28 08:12:24

标签: c memory arm keil

我正在使用C开发一个用于ARM处理器的程序,在我的程序中,当我的内存使用量增加时(当程序流经其中已定义数组的函数时)程序出乎意料地行为,我认为一些变量被覆盖,就是当它耗尽内存时,它开始从头开始分配内存。

现在我的问题是:是否覆盖旧变量时缺少内存所需的行为?如果是,我该如何避免这种情况?

我正在使用Keil uVision和lpc 1768。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

是的,你是对的。当堆栈内存已满时,它开始从底部地址(0x00..0)填充它。这会导致旧的变量被覆盖,程序会出现意外行为。 解决方案:解决此问题的最简单方法是永远不要直接定义数组,而是使用malloc或calloc来尽快分配内存并释放内存。这可以防止内存被覆盖。这也是一种很好的做法。

答案 1 :(得分:0)

1)是。由于缺乏记忆而发生了旧的变量 2)为避免这种情况尝试最小化阵列大小,或者可以增加堆栈大小。在Keil uVision中,可以选择增加堆栈大小。这可以解决您的问题