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

问题描述 投票:0回答:2

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

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

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

c compiler-optimization
2个回答
1
投票
就C标准而言,C允许优化,但是编译器完全不需要优化代码就可以兼容。

0
投票
您说“编译器”,但这是链接器的功能:只有链接器才能知道任何编译单元(目标文件)是否未使用数组。
© www.soinside.com 2019 - 2024. All rights reserved.