ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
C/C++ 編譯器對寄存器變量(用 register 關鍵字定義的變量)的處理方式不同,具體取決于您是否使用 --opt_level (-O) 選項。
編譯器會忽略任何寄存器定義,并使用能夠充分利用寄存器的算法將寄存器分配給變量和臨時值。
如果您使用 register 關鍵字,則可以建議將變量作為分配到寄存器的候選對象。編譯器使用與分配寄存器變量時所用的同一組寄存器來分配臨時表達式結果。
編譯器嘗試遵守所有寄存器定義。如果編譯器將合適的寄存器耗盡,它會通過將寄存器內容移動到存儲器來釋放寄存器。如果您將太多對象定義為寄存器變量,則會限制編譯器具有的用于臨時表達式結果的寄存器數量。此限制會導致寄存器內容過多地移動到存儲器中。
任何具有標量類型(整數、浮點或指針)的對象都可以被定義為寄存器變量。對于其他類型的對象(例如數組),將忽略寄存器指示符。
寄存器存儲類對參數和局部變量都有意義。通常,在函數中,一些參數會被復制到堆棧上的某個位置,并在函數體內的這個位置被引用。編譯器將寄存器參數復制到寄存器而不是棧,從而加快對函數內參數的訪問。
更多有關寄存器慣例的信息,請參閱節 6.3。