我正在为c编写一个Atmel XMEGA微控制器的固件,我想我填充了4 KB的SRAM。据我所知,我只有静态/全局数据和本地堆栈变量(我不在我的代码中使用malloc)。我如何知道我的记忆是否已满?
我使用本地变量缓冲一些像素数据。如果我将缓冲区增加到51字节,我的显示器显示出奇怪的结果 - 一个6字节的缓冲区运行良好。这就是为什么我认为我的内存已满并且堆栈覆盖了某些内容。
创建更多的空闲内存是而不是我的问题,因为我可以将一些静态数据移动到闪存中,只在需要时才加载它。令我困扰的是,我从未发现记忆已满。
当内存被填满而不是让它覆盖其他数据时,是否有可能发现(例如,通过重置微控制器)?
据我所知,局部变量确实存在于堆栈中。但是堆栈的大小在编译时还不知道,还是我错了? – Martin 2010-11-10 09:41:52
@Martin:如果你不使用递归和变量大小的局部变量(字母只允许一些C编译器),则可以在编译时知道栈的大小。 – Curd 2010-11-10 09:56:23