簡體   English   中英

GCC預處理程序將優化什么?

[英]What will the GCC pre-processor look to optimize?

假設我們有一個宏+一個函數:

#define MY_MACRO (2*64)

int foo(void)
{
    return (2 * (MY_MACRO));
}

gcc MY_MACRO會在編譯時將MY_MACRO優化為等於128,而不是將計算作為運行時操作? 並在return語句中更進一步,是否會以類似的方式將其優化為等於256?

如果是這樣,在可能的優化方面,預處理器還會尋找什么其他東西?

GCC預處理程序將優化什么?

沒有。 預處理器不會執行優化-它所做的只是擴展宏和#include指令。

但是,一旦預處理程序完成了代碼,編譯器就會看到:

return (2 * ((2*64)));

它肯定可以優化到return 256的等效值。 它既不知道也不在乎輸入(2*64)是由宏生成的。

是的,優化器(不是預處理器)應合並常量。

通過積極的優化,它甚至可以將整個函數內聯為int常量256。

通常在編譯時由gcc 評估常數值,所以可以。

盡管預處理器只是替換文本,但優化是由編譯器完成的。

執行哪些優化取決於編譯器,優化級別,目標CPU架構以及編譯器開發人員已做出的許多其他決定。

如果需要知道,您應該自己檢查編譯器生成的匯編代碼,例如運行

gcc -O2 -S foo.c 

並檢查生成的foo.s文件。 這是一個ARM平台的示例,因為您沒有看到正在執行的乘法:

foo:

        mov     r0, #256
        bx      lr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM