我正在寫一些代碼,其中速度非常重要。在編寫測試用例之後,我只是轉向編寫主要的二進制文件。對於我的測試跑者,我只是用通配符向鏈接器提供一切。 (如下)編譯器是否會優化未使用的鏈接文件?
在我看來,鏈接是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的性能 – Matt
應該很簡單,嘗試一個實驗。寫下「hello,world」,鏈接一堆不需要的.objs,看看可執行文件有多大。重複沒有.objs,看看有多大的可執行文件。 – user888379
@ user888379:因爲(在現代操作系統中)整個可執行文件沒有被加載到內存中 - 只有實際使用的部分 - 從一個大的可執行文件中沒有速度的損失。 –