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 關(guān)鍵字定義的變量)的處理方式不同,具體取決于您是否使用 --opt_level (-O) 選項(xiàng)。
編譯器會忽略任何寄存器定義,并使用能夠充分利用寄存器的算法將寄存器分配給變量和臨時值。
如果您使用 register 關(guān)鍵字,則可以建議將變量作為分配到寄存器的候選對象。編譯器使用與分配寄存器變量時所用的同一組寄存器來分配臨時表達(dá)式結(jié)果。
編譯器嘗試遵守所有寄存器定義。如果編譯器將合適的寄存器耗盡,它會通過將寄存器內(nèi)容移動到存儲器來釋放寄存器。如果您將太多對象定義為寄存器變量,則會限制編譯器具有的用于臨時表達(dá)式結(jié)果的寄存器數(shù)量。此限制會導(dǎo)致寄存器內(nèi)容過多地移動到存儲器中。
任何具有標(biāo)量類型(整數(shù)、浮點(diǎn)或指針)的對象都可以被定義為寄存器變量。對于其他類型的對象(例如數(shù)組),將忽略寄存器指示符。
寄存器存儲類對參數(shù)和局部變量都有意義。通常,在函數(shù)中,一些參數(shù)會被復(fù)制到堆棧上的某個位置,并在函數(shù)體內(nèi)的這個位置被引用。編譯器將寄存器參數(shù)復(fù)制到寄存器而不是棧,從而加快對函數(shù)內(nèi)參數(shù)的訪問。
更多有關(guān)寄存器慣例的信息,請參閱節(jié) 6.3。