我想優化大量的乘法和指針算法,並希望看到當我放入優化標誌時編譯器會做什麼。如何查看由C/C++程序的gcc(任何flavor)編譯器生成的彙編代碼?
- 編輯 -
如何將其限制於特定的功能或代碼塊?
--Edit_2--
如何讓GCC產生一個更簡潔的彙編代碼?
我想優化大量的乘法和指針算法,並希望看到當我放入優化標誌時編譯器會做什麼。如何查看由C/C++程序的gcc(任何flavor)編譯器生成的彙編代碼?
- 編輯 -
如何將其限制於特定的功能或代碼塊?
--Edit_2--
如何讓GCC產生一個更簡潔的彙編代碼?
將-S
添加到您的命令行。
編輯:不要忘記它會將程序集放到您在-o
開關下指定的文件中。
你可以使用'gcc -O3 -march = native foo.c -S -o- |更少「管道到'less'而不是創建'.s'文件。另請參閱[如何從GCC/clang程序集輸出中刪除「噪音」?](https://stackoverflow.com/questions/38552116/how-to-remove-noise-from-gcc-clang-assembly-output)瞭解更多信息有關查看asm輸出的「有趣部分」的提示,特別是** Matt Godbolt的CppCon2017演講:[「我的編譯器最近爲我做了什麼?取消編譯器的蓋子「](https://youtu.be/bSkpMdDe4g4)** – 2018-02-27 20:00:53
如何限制它到一個特定的功能或代碼塊?
將該函數放在單獨的源文件中(併爲該源文件使用不同的命令行參數)。
這就是我一直在做的事情。我很好奇,如果只有選擇可能。 – vehomzzz 2009-08-30 21:24:12
這可能並不反映它是如何真正優化,如果它可以內聯到呼叫者。 (特別是在鏈接時優化)。即使只有一個參數是編譯時常量也會產生很大的差異,或者已知數組的對齊或大小可以改變自動向量化。但是,是的,這很好,如果你明白你在做什麼。 – 2018-02-27 20:04:23
您可以阻止您在Visual Studio調試器中的斷點處編程,並執行「顯示程序集」,甚至一次只執行一條指令。
爲什麼這個迴應是低票?這是一個非常有效的迴應。 – aaronsnoswell 2013-12-24 00:10:10
@aaronsnoswell我沒有這樣做,但可能是因爲這個問題明確地涉及GCC。 – delicateLatticeworkFever 2014-11-01 15:48:19
您也可以在類似gdb
的調試器中運行該程序並使用反彙編視圖。在gdb
中,您可以使用命令disass/m
查看與當前位置上的C代碼混合的程序集。
你可以添加一個最小的例子嗎? 'disass/m'只是打印'沒有選擇框架。「 – 2016-04-11 19:28:05
不太詳細的程序集?你究竟是什麼意思? – 2009-08-30 21:29:06
彙編代碼。換句話說,我不想要很多有趣的事情,例如激活記錄的初始化,但只有代碼與我的狀態相關。希望它更清晰。 – vehomzzz 2009-08-30 21:31:18
所以你想讓gcc生成_incorrect_彙編代碼,那隻能滿足你對美的認識?不,先生。 – 2009-08-30 21:39:09