我在具有非常小的 RAM 空间 (16MB) 的基于 arm 的 Linux 设备上运行 C 代码。我的代码经常被内核杀死(SIGKILL)并显示“内存不足”消息。我用 Valgrind 运行程序,看起来没有内存泄漏。我也使用 gdb 运行代码,但无法识别代码中的任何错误。我将尝试多次优化我的代码。
一般来说,代码的最佳实现实践是什么以最大限度地减少内存使用量?
- 一个可能是尽可能多地使用函数(?),但我想 gcc 已经优化了代码以减少源代码的使用。
- 避免动态内存分配
- 还有什么?
最佳答案
注意对象的范围。确保在不再需要对象后处理内存释放。我不确定我是否理解您的尽可能多地使用函数(?)
。函数需要开销,每次调用都会占用一些额外的内存,因为它必须在调用堆栈上存储一些指针和一些关于方法的信息。因此,虽然这可能有助于保持您的源代码清洁 - 但它不会降低您的内存使用量(它可能会增加它)。在 C 中获得两全其美的一种方法是使用 inline
函数——这向编译器建议它不应该创建一个实际的函数,而只是在任何使用它的地方插入该代码块.请记住,高效代码通常具有更多机器级别的外观(意味着重复、指针和通常由开发人员管理的数组索引),而不是利用用途广泛、功能丰富的对象。但是,谢天谢地有智能编译器,所以你不必知道每一个优化。然而,在像 c 这样的低级语言中,由于它赋予您如此多的能力来操纵一切,您需要小心不要犯下代价高昂的错误。
关于c - 什么是最小化 RAM 消耗的良好实现实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018923/