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

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

因此,要在此处学习正确的教训:编译器不会总是,永远不会或有时不涉及数组。它取决于编译器和优化级别,还是某种程度上与C标准要求联系在一起?我疯了吗,还是大多数编译器似乎都没有排除它们?

谢谢。

评论