我在一个基于arm的Linux设备上运行一个C代码,它有一个很小的RAM空间(16 on )。我的代码经常被“内存不足”消息的内核杀死(SIGKILL)。我运行的程序与瓦兰,它看起来不存在内存泄漏。我也使用gdb运行代码,但无法识别代码上的任何错误。我将尝试优化我的代码,多次通过它。
一般来说,代码上的良好实现实践是什么,以尽量减少内存的使用?
发布于 2013-08-02 14:11:16
注意对象的范围。确保在不再需要对象之后处理内存取消分配。我不太明白你的use functions as much as possible(?)。函数需要开销,每个调用都会占用一些额外的内存,因为它必须在调用堆栈上存储一些指针和一些有关方法的信息。因此,尽管这可能有助于保持源代码的整洁--但它不会降低您的内存使用量(可能会增加内存使用量)。在C中获得最佳效果的一种方法是使用inline函数--这意味着编译器不应该创建实际的函数,而是将代码块插入到任何使用它的地方。请记住,高效的代码通常具有更多的机器级别(意味着重复、指针,通常还有开发人员管理的数组索引),而不是利用广泛的用途,功能丰富的对象。但是,感谢聪明的编译器,所以您不必知道每一个优化。但是,在较低级别的语言(如c )中,由于它赋予了您操作一切的能力,因此您需要小心,以免犯代价高昂的错误。
发布于 2013-08-02 14:46:24
如果您在Linux上有这样的问题,您可以禁用超额提交内存。它将确保所有分配的内存都有物理内存。内核将不太可能杀死您的程序。然后,一定要测试所有错误的结果,因为当您不再有内存时,它们将在某个时候失败。您可以在这里找到更多信息:http://www.etalabs.net/overcommit.html
您还可以禁用嵌入式系统上的一些程序来释放内存。可能你不使用cron,或者在启动时不需要6个TTY。
https://stackoverflow.com/questions/18018923
复制相似问题