未使用的声明和定义会影响二进制/编译/链接速度/其他吗?我想知道是否有些 TU 只使用标头中一千个函数中的一个,将这个函数分离到一个单独的标头中以避免处理 999 个不必要的函数是否有意义?
void foo(); // попадёт ли этот foo в бинарь? уменьшится ли скорость компиляции/линковки?
int main() {
return 42;
}
void foo() {} // а теперь?
int main() {
return 42;
}
void foo();它肯定不会击中任何地方,因为那里没有任何东西可以击中。但是编译可能会变慢一点,仅仅是因为编译器需要消化更多的代码。void foo() {}影响编译时间和链接时间,因为链接器负责抛出不必要的函数(如果它们具有外部链接,即在类/函数之外不是静态的,即在其他翻译单元中可见)。您可能需要启用一些优化。在第二个示例中,我仅使用 flag 获得了相同大小的二进制文件
-s。关于二进制文件的大小:一个小测试。
用命令
gcc main.cpp(mingw)编译。我得到以下结果:选项 1 - 41,549 字节
选项 2 -> 42,079 字节
选项 3 -> 41,549 字节
从上面的例子可以看出,在没有优化的情况下,我们得到下图: