C標準不允許對結構進行某些優化:例如,重新排列字段,合併字段,丟棄永遠不會讀取的字段,如果字段可以變成自動變量等等,這是由於各種原因需要的,包括跨編譯單元的一致的結構佈局以及允許與演員兼容的結構。C編譯器結構優化
是否有任何現代編譯器(例如gcc,clang,Visual C)支持擴展,允許我告訴它它是可以做這些優化嗎?
當然,它們只適用於單個編譯單元本地的定義,以便編譯器可以看到該結構的所有可能用法;和某些東西(如前述的與演員兼容的結構定義)將變得無法使用。但對於某些任務,這可能是一個非常有價值的優化。
我知道,GCC 用於有-fipa-struct-reorg
選項允許正是這個,但是它從來沒有工作非常好,有點腐爛,並最終被取出。但我不知道它是否被任何東西取代。我一直沒能找到任何東西在叮噹中,這令我感到驚訝,因爲我認爲這正是鏗鏘聲將會全部結束的最優化類型...
-flto能夠優化這樣的事情嗎? – 2012-03-27 21:45:36
如果你給結構變量存儲類「register」,它*可能會有所幫助,這會強制你不依賴於語言級別的內存佈局;然而,優化器應該能夠弄清楚,無論是否存在「註冊」,我不知道它是否在實踐中有任何區別... – Christoph 2012-03-27 22:42:56
不幸的是,不值得一試--- TA。 ('register'在結構成員或靜態變量上無效,並且在自動變量上似乎被忽略。) – 2012-03-28 11:07:15