【发布时间】:2013-10-16 19:57:05
【问题描述】:
我正在编写一些速度非常重要的代码。我只是在编写测试用例后开始制作主要的二进制文件。对于我的测试运行器,我只是将所有内容提供给带有通配符的链接器。 (如下)
在我看来,链接是 C++ 将事物粘合在一起的阶段 - 填充对函数等的引用并将所有内容放在一起以形成二进制文件。
# Do the linking for the test binary
$(BIN)test_cases: $(TEST)TestRunner.o
$(CC) $(TEST)*.o $(SRC)*.o $(CPPUNITLINKS) $(MAINLINKS) -o $(BIN)test_cases
我的问题是,鉴于我希望以任何可能的方式加速我的程序,我会更好地链接“主”二进制文件所需的最低限度的文件吗?这会导致更精简的可执行程序或更快的程序,还是编译器已经有效地丢弃了它不需要的任何东西?
【问题讨论】:
-
我认为链接所有 obj 文件不会影响 exe 的性能
-
应该是简单的尝试一个实验。写“hello, world”,链接一堆不需要的 .obj 文件,看看可执行文件有多大。在没有 .objs 的情况下重复,看看该可执行文件有多大。
-
@user888379:因为(在现代操作系统中)整个可执行文件没有加载到内存中——只有实际使用的部分——拥有大型可执行文件并不会降低速度。
-
当然,我可以测试一下,我可能会显式链接主二进制文件,看看它是如何影响它的。我的程序很难加快测试速度,但是因为它有很多随机方面。我想我在了解了更多关于链接过程的知识之后,感觉自己做对了!
标签: c++ performance gcc compilation linker