compiler-optimization

    0熱度

    1回答

    我正在尋找一些關於編譯器優化何時發生的信息,即在編譯時或運行時。我搜索了網頁,並得到了一個粗略的想法,即優化主要發生在編譯時。 但在編譯階段,編譯器會完成優化。 任何人都可以請解釋上述查詢。 我在Linux上使用GCC編譯器優化C語言程序時提出了這個問題。

    1熱度

    1回答

    這裏是我的代碼部分:(注意M是一個大的數字) void myFunc(std::map<int, int>& myMap, int** arr) { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { arr[i][j] = myMap[i] * j + i; } }

    2熱度

    1回答

    我最近偶然發現了一個我不明白的有趣的編譯器代碼。 看看下面的代碼: unsigned char x; ... x |= 127; x |= 128; 對於第一條語句,編譯器生成: or eax, 0x7f. 然而,在第二條語句,就變成: or eax, 0xffffff80 似乎對值小於127,則使用一個字節值,而在128個dword之後是優選的。 有沒有人知道爲什麼會發生這種情

    -1熱度

    1回答

    LLVM IR中sunkaddr的具體用法和具體用法。 我看到它用於在for循環中向量化數組的訪問。 它是一個寄存器或內存操作數?我在哪裏可以找到更多關於sunkaddr的信息。

    0熱度

    1回答

    在本徵,與 ArrayXXf a; a = ArrayXXf::Random(1000, 10000); 做 a = a.pow(4); 大約需要在我的電腦500毫秒,而做 a = a.square().square(); 需要只有約5ms。我正在編譯最近發佈的GCC。 這是預期的行爲還是我做錯了什麼?我認爲,至少對於小整數來說(例如,如果不使用成本函數,則爲< 20),那麼應該存在

    0熱度

    1回答

    我懷疑gcc 4.8.3是否內聯錯誤的模板函數......在調試模式下不會發生此問題,但僅在優化模式下。然而,這發生在一個複雜的代碼庫中,我無法在簡單的測試用例中重現該問題。 我的代碼是像下面 ​​ 在調試版本,它打印出A,而在優化的建立,它打印出在這裏?\ NB 我想任何內襯採用通用模板函數定義但不是專門定義的。但屬性((noinline))沒有幫助。 有沒有人,如果我的代碼有C++定義的行爲?

    1熱度

    1回答

    我有一個字段,縮寫爲其最左邊的2個字符時可以作爲關鍵字段連接到另一個表。 當我這樣做時,我總是必須在自己的查詢中執行LEFT([FieldName],2)位,然後在第二個查詢中執行實際的連接。 有沒有在單個查詢中完成此操作的方法? 下面是查詢的語法,它刪除最左邊的兩個字符;讓我們把它QueryA: SELECT Left([TableA].[Field1],2) AS AbbrField1 FR

    0熱度

    1回答

    介紹 我打算用Java編寫的算法(這樣我就可以學習這門語言),其運行時間應在幾秒鐘。這個小算法將從bash調用大約10000次。 問題 Java將每即使通過bash稱爲10,000次的循環過程中被調用時,它是正確的做優化? 我的代碼可能會佔用約2000行,並運行約5秒鐘。您認爲執行優化的時間與運行時間相比可以忽略不計? 有沒有一種方法來計算優化一次(就像它會在C++中工作)? java是不是被用於

    5熱度

    1回答

    如果啓用了-Wsequence-point,當未定義的行爲代碼被發現時,GCC應該警告用戶。例如 b = a + ++a; 應該由海灣合作委員會注意到,應報告爲「未定義行爲」的代碼(因爲ISO C沒有指定除了評估操作數的順序)。 不過,我打了語法,我想這一個: int *a = malloc(sizeof(int) * 2); a[0] = 1; printf("%d\n", *(a +

    20熱度

    3回答

    我已經用遍了我的代碼一個宏,在調試模式下的功能: #define contract(condition) \ if (!(condition)) \ throw exception("a contract has been violated"); ...但在釋放模式: #define contract(condition) \ if (!(condition))