c - 什么是最小化 RAM 消耗的良好实现实践

标签 c performance memory-management ram memory-efficient

我在具有非常小的 RAM 空间 (16MB) 的基于 arm 的 Linux 设备上运行 C 代码。我的代码经常被内核杀死(SIGKILL)并显示“内存不足”消息。我用 Valgrind 运行程序,看起来没有内存泄漏。我也使用 gdb 运行代码,但无法识别代码中的任何错误。我将尝试多次优化我的代码。

一般来说,代码的最佳实现实践是什么以最大限度地减少内存使用量?

  • 一个可能是尽可能多地使用函数(?),但我想 gcc 已经优化了代码以减少源代码的使用。
  • 避免动态内存分配
  • 还有什么?

最佳答案

注意对象的范围。确保在不再需要对象后处理内存释放。我不确定我是否理解您的尽可能多地使用函数(?)。函数需要开销,每次调用都会占用一些额外的内存,因为它必须在调用堆栈上存储一些指针和一些关于方法的信息。因此,虽然这可能有助于保持您的源代码清洁 - 但它不会降低您的内存使用量(它可能会增加它)。在 C 中获得两全其美的一种方法是使用 inline 函数——这向编译器建议它不应该创建一个实际的函数,而只是在任何使用它的地方插入该代码块.请记住,高效代码通常具有更多机器级别的外观(意味着重复、指针和通常由开发人员管理的数组索引),而不是利用用途广泛、功能丰富的对象。但是,谢天谢地有智能编译器,所以你不必知道每一个优化。然而,在像 c 这样的低级语言中,由于它赋予您如此多的能力来操纵一切,您需要小心不要犯下代价高昂的错误。

关于c - 什么是最小化 RAM 消耗的良好实现实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018923/

相关文章:

c - 在哪些情况下 i++ 和++i 可以引用相同的值?

c - 如何读取在预期 float 末尾错误键入的字符?

performance - 访问控件值的最有效方法是什么?

c++ - 从没有锁的多个线程读取动态/变化的数据?它会导致崩溃吗?或者只是损坏的变量?

google-chrome - 使用 Canvas drawImage 方法在谷歌浏览器中增加奇怪的内存

c - Windows 上的定时器和 sleep

c - 如何在arduino中创建嵌套对象JSON

mysql - 可以或不可以时限制 SQL?

performance - Nutch 1.12和Elasticsearch 1.4.1性能需求

c++ - 编译器优化掉的内存分配