3
我想知道如果我得到完全相同的二進制結果,如果我與編譯:將具有相同的源,編譯器和庫版本結果編制完全相同的二進制
- 相同的源代碼
- 相同的編譯器,版本,指揮
- 相同的庫
還是有也可能導致不同的二進制文件像其他限制:
- 當源編譯
- 系統時間,內核版本
- 其他的構建工具
謝謝!
我想知道如果我得到完全相同的二進制結果,如果我與編譯:將具有相同的源,編譯器和庫版本結果編制完全相同的二進制
還是有也可能導致不同的二進制文件像其他限制:
謝謝!
無法保證僅通過修復代碼,庫和編譯器即可獲得相同的輸出。正如你已經確定,在編譯器運行環境可能產生影響:
即使您可以找到並控制所有這些功能,編譯也可能不是確定性的。下面是來自GCC 3.3 documentation一個具體的例子(注意措辭最新版本已經改變):
-fno猜測分支概率
使用隨機模型不要猜測分支概率。 有時,gcc會選擇使用隨機模型來猜測分支概率,當分析反饋(-fprofile-arcs)或__builtin_expect中沒有可用的分支概率時。這意味着同一程序中不同的編譯器運行可能產生不同的目標代碼。
在硬實時系統中,人們不希望編譯器的不同運行產生具有不同行爲的代碼;最小化非決定論是最重要的。這個開關允許用戶減少非確定性,可能以犧牲較差的優化爲代價。
編號您的編譯器可能會在文件中寫入時間/日期標記。它也可能通過使用基於隨機化的優化來產生代碼生成的不同結果。可以構建一個確定性的編譯器;只是不要指望你必須那樣。 – 2013-03-06 06:32:00