C编译器是否总是,从不或有时排除代码未触及的文件级数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C编译器是否总是,从不或有时排除代码未触及的文件级数组?相关的知识,希望对你有一定的参考价值。

我们刚刚遇到并解决了一个问题,当我们包含访问某些大型数组的某些代码时,RAM会飙升。这导致了以下问题:我显然是在误解,认为C编译器会排除未调用的函数,但不会排除在文件级别声明但未被触及的数组。我想这在世界范围内是可行的,但是我敢肯定,我已经看到了不同的行为,只是创建了一个数组,并观察了RAM使用率的跳跃(而无需编写涉及该数组的代码)。这是特别的。令人震惊,因为我们处于零优化状态。

因此,在这里要学习正确的课程:是未被触及的数组,永远不会被编译器排除,或者有时会被编译器排除。它取决于编译器和优化级别,还是某种程度上与C标准要求联系在一起?我疯了吗,还是大多数编译器似乎not排除了它们?谢谢。

我们刚刚遇到并解决了一个问题,当我们包含访问某些大型数组的某些代码时,RAM会飙升。这导致了以下问题:我显然在...

答案
就C标准而言,C允许优化,但是编译器完全不需要优化代码就可以兼容。
另一答案
您说“编译器”,但这是链接器的功能:只有链接器才能知道任何编译单元(目标文件)是否未使用数组。

以上是关于C编译器是否总是,从不或有时排除代码未触及的文件级数组?的主要内容,如果未能解决你的问题,请参考以下文章

使用未定义的引用构建库归档

如何从 maven 项目中自动排除未使用的 jar 文件?

eclipse总是未响应,有时候是打开软件就卡住了,有时候是在编代码,无缘无故就卡住了

最终构建中是不是包含未使用的 Cocoa Touch 框架?

C#-C#-#define条件编译

C#-#define条件编译