![大小优化是否会减少运行时内存使用以及二进制大小?](https://linux22.com/image/2007/%E5%A4%A7%E5%B0%8F%E4%BC%98%E5%8C%96%E6%98%AF%E5%90%A6%E4%BC%9A%E5%87%8F%E5%B0%91%E8%BF%90%E8%A1%8C%E6%97%B6%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E4%BB%A5%E5%8F%8A%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
是否优化尺寸gcc -Os
仅有的减少程序的二进制大小,或者也减少其运行时内存使用量?我知道什么确切地结果取决于具体代码,但一般来说结果是内存使用率较低吗?
答案1
显然,由于程序需要加载到内存中,-Os
会导致内存使用率降低。但这是它对内存使用的唯一影响。
答案2
一方面是 -Os 会尝试为您提供一个更小的应用程序,并且因为它更小有时由于执行的代码较少,因此执行速度会更快。
答案3
事实上,根据一些消息来源,比如gentoo 维基,-Os
标志能比仅仅减少二进制占用空间有更多的好处。但大量使用它可能会导致问题。对于大型程序可以看到实际的好处,但由于该标志可能会触发一些错误,因此必须小心不要将其与不稳定的代码一起使用。因此,不幸的是,这意味着真正的大型软件更有可能暴露错误(纯粹概率:更多代码 => 暴露错误的风险更高)。许多大型应用程序过滤掉这个标志在构建时防止此类错误被暴露。
另请记住,-Os
仅能使应用程序更快 - 这不是规则。可以肯定的是,编译器将尝试使程序更小。
答案4
正如 Kim 所说,生成的二进制文件较小,因此堆栈内存使用量也会较小。
它也可能比其他一些优化标志更快,因为更多的程序将适合 CPU 缓存。这就是它最近变得更受欢迎的原因之一。