具有最小 RAM 的 C 程序

2023-12-26

我想了解应用程序开发的 C 和 C++ 编程中的内存管理。应用程序将在 PC 上运行。

如果我想让一个程序在运行时尽可能少地使用RAM,那么在编程时我需要考虑哪些要点?

根据我的理解,但我不确定的有两点:

(1) 在 main() 和其他函数中使用最少的局部变量。 由于局部变量保存在堆栈中,那么RAM是什么呢?

(2) 顶部使用全局变量,而不是局部变量。 由于全局变量保存在未初始化和已初始化的ROM区域中?

Thanks.


1)通常,在堆栈上分配的替代方法是在堆上分配(例如,使用malloc)实际上由于簿记等原因具有更大的开销,并且堆栈已经为其保留了内存,因此在可能的情况下在堆栈上进行分配通常是更可取的。另一方面,堆栈上的空间较少,而在具有虚拟内存和 64 位地址空间的现代系统上,堆可以接近“无限”。

2) 在 PC 和其他非嵌入式系统上,程序中的所有内容都存储在 RAM 中,即,它不会闪存到类似 ROM 的内存中,因此全局与本地在这方面没有帮助。此外,只要应用程序正在运行,全局变量往往就会“存活”,而局部变量可以根据需要分配和释放(在堆栈或堆上),因此更可取。

† 更准确地说,还可以有局部变量static持续时间,以及具有全局作用域的变量,这些变量是指向动态分配的内存的指针,因此术语本地和全局在这里使用得相当宽松。

一般来说,现代台式机/笔记本电脑甚至移动操作系统都非常擅长管理内存,因此您可能不应该尝试对所有内容进行微优化,因为实际上可能弊大于利。

如果您确实需要减少程序的内存占用,您必须意识到一切程序中的内容存储在 RAM 中,因此您需要努力减少所拥有的东西的数量和大小,而不是试图改变它们的位置。您可以在 PC 上本地存储内容的另一个地方是硬盘驱动器,因此在那里存储大量资源,并且仅根据需要加载它们(最好仅加载所需的部分)。但请记住,磁盘访问比内存访问慢几个数量级,并且如果内存已满,操作系统也可以将内容交换到磁盘。

程序代码本身也存储在 RAM 中,因此请让编译器优化大小(-Os or /Os许多常见编译器中的选项)。还要记住,如果通过编写更复杂的代码来节省一些变量空间,那么代码大小的增加可能会抵消这一努力;保存您的优化以获得巨大的胜利(例如,压缩大量资源将需要添加解压代码,但仍可能产生巨大的净胜利)。使用动态链接库(和其他资源)也有助于overall如果同时运行的多个程序使用同一个库,则系统的内存占用量。

(请注意,上述一些内容不适用于嵌入式开发,例如,代码和静态常量确实可能存储在闪存而不是 RAM 中,等等。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有最小 RAM 的 C 程序 的相关文章

随机推荐