我有一個非常性能敏感的應用程序,並且很好奇我是否可以保存一些常量用於鏈接。我使用了一些我正在使用的全局常量(例如模擬尺寸),這些常量被用於瘋狂的量。我試着將它們從常量改變爲變量,性能大幅下降。因此,我創建了一個有點複雜的系統,它從配置文件中分配常量,併爲請求的一組參數顯式構建一個可執行文件。因此,我想盡量減少我爲每個參數更改重建的東西。在鏈接時定義的C常量
問題是如果我可以預先編譯我的一些對象,並將值放在鏈接時間。 我能想到的最可能的實現方式是將那些常量作爲const
參數包含在需要它們的函數中,並希望編譯器/鏈接器優化的結果與將其硬編碼爲#define
常數的性能相同。有關如何使這項工作的任何建議? (你知道人們如何說「但是這並不重要,除非你在集羣上進行數十億次的科學計算」 - 我是那種在科學中做數十億次的人在羣集上計算是的,在完全實現它之前,我也會對任何東西進行基準測試。)
有什麼不好定義? – BlackBear 2012-03-17 21:30:19
我想在儘可能少地重新編譯時改變它的值。 – zebediah49 2012-03-17 21:47:43
你使用什麼編譯器(和版本)和處理器?較新版本的gcc可以使用LTO(鏈接時間優化http://gcc.gnu.org/wiki/LinkTimeOptimization)來優化編譯代碼,這可能允許您重新編譯一個常量文件。 LTO被引入4.5,並在4.6以後取代IMA,所以我認爲它沒問題。很值得測試和區分反彙編(objdump)文件以瞭解影響。我對你們的發現很感興趣,我的Cortex-M4擁有幾個備用週期 - !) – gbulmer 2012-03-18 00:04:44