自動 靜態 暫存器 易失變數的區別

2021-06-07 12:21:52 字數 1864 閱讀 8819

自動變數什麼是自動變數呢?自動變數就是指在函式內部定義使用的變數。他只是允許在定義他的函式內部使用它。在函式外的其他任何地方都不能使用的變數。自動變數是區域性變數,即它的區域性是在定義他的函式內部有效。當然這說明自動變數也沒有鏈結性,因為它也不允許其他的檔案訪問他。由於自動變數在定義他的函式的外面的任何地方都是不可見的,所以允許我們在這個函式外的其他地方或者是其他的函式內部定義同名的變數,他們之間不會發生衝突的。因為他們都有自己的區域性,而且它沒有鏈結性(即:不允許其他的檔案訪問他的)。來看看自動量的持續性。計算機在執行這個函式的時候,建立並為它分配記憶體,當函式執行完畢返回後,自動變數就會被銷毀。這個過程是通過乙個堆疊的機制來實現的。為自動變數分配記憶體就壓棧,而函式返回時就退棧。 

c**  

/* auto */

#include 

int main()  

int print()  

/* end */

靜態變數:   靜態變數與自動變數的本質區別是,靜態變數並不像自動變數那樣使用堆疊機制來使用記憶體。而是為靜態變數分配固定的記憶體,在程式執行的整個過程中,它都會被保持,而不會被銷毀。這就是說靜態變數的持續性是程式執行的整個週期。這有利於我們共享一些資料。如果靜態變數在函式內部定義,則它的作用域就是在這個函式內部,僅在這個函式內部使用它才有效,但是它不同於自動變數的,自動變數離開函式後就會被銷毀,而靜態變數不會被銷毀。他在函式的整個執行週期內都會存在。在函式外面定義的變數為全域性變數,工程內的所有檔案都可以訪問他,但是它在整個工程內只能定義一次,不能有重複的定義,不然就會發生錯誤,而其他的檔案要想使用這個變數,必須用extern來宣告這個變數,這個宣告叫做引用宣告。這一點很重要,如果你沒有用extern 來宣告在其他檔案中已經定義的全域性變數,就來使用它,就會發生錯誤如果你只是想在定義他的檔案中使用它,而不允許在其他的檔案中使用它,那麼就用關鍵字 static來在函式外面宣告變數。這樣這個變數在其他檔案中將不可見,即它的連線性而內部鏈結。有一點是我們值得注意的。像:如果你在函式外這樣宣告乙個變數,const int a ; 變數a的連線性為內部鏈結,只能在定義他的檔案內使用。還有如果你在定義靜態變數的時候並沒有給變數初始化,則靜態變數將被自動初始化為0; 

c**  

/* static */

#include 

int main()  

int print()  

/* end */

暫存器變數:   在c語言當中可以使用暫存器變數來優化程式的效能,最常見的是在乙個函式體當中,將乙個常用的變數宣告為暫存器變數: register int ra; 如果可能的話,編譯器就會為它分配乙個單獨的暫存器,在整個函式執行期間對這個變數的操作全都是對這個暫存器進行操作,這時候就不用頻繁地去訪問記憶體了,自然就提高了效能.但是暫存器變數不是強制性的,也就是,即使你使用register關鍵字去宣告乙個變數為暫存器變數,編譯器還是有可能把它作為乙個普通的變數而不是暫存器變數來使用的. 在我們寫程式的過程當中,有時候會經常用到乙個全域性變數,如果能夠把它作為暫存器變數來使用,顯然可以提高程式的效能,特別是對於那些對效能要求比較高的程式(比如模擬器,虛擬機器等).拿x86平台來說,如果使用gcc擴充套件,可以按照如下方式宣告乙個全域性暫存器變數,並指定它存入ebx暫存器:int ra asm("ebx");用作這種用途的還有「ebp, ebx, esi, edi".這時候需要在編譯程式的時候給出特別的選項,因為有些暫存器原本是另有用途的,比如ebp暫存器,原來是做frame-pointer用.

易失變數:   volatile:(嵌入式程式設計師必須掌握的)volatile最初的意思是表示汽油容易揮發,在c中的作用大概有兩點(1)表示變數是易失的,易變的. (2)強制訪存操作,防止編譯器去優化,告訴編譯器每次必須去記憶體中取值,而不是從暫存器或者快取.

自動 靜態 暫存器 易失變數的區別

自動變數什麼是自動變數呢?自動變數就是指在函式內部定義使用的變數。他只是允許在定義他的函式內部使用它。在函式外的其他任何地方都不能使用的變數。自動變數是區域性變數,即它的區域性是在定義他的函式內部有效。當然這說明自動變數也沒有鏈結性,因為它也不允許其他的檔案訪問他。由於自動變數在定義他的函式的外面的...

靜態變數 自動變數與暫存器變數的儲存

變數的儲存位置與變數的型別有關,這裡變數的型別不是int float之類的型別,而是分為三類 靜態變數 自動變數和暫存器變數。然而,變數到底屬於這三類中的哪一類是根據變數在原始檔中的宣告位置和宣告方式所決定的。變數的儲存型別 storage class 是指儲存變數值的記憶體型別。變數的儲存型別決定...

暫存器是什麼?記憶體 暫存器和儲存器的區別

什麼是暫存器?暫存器就是計算機中用來在操作時暫時儲存資訊的部件。說到儲存資訊,你是不是想到了記憶體卡和儲存器,那你知道它們之間的區別嗎?不知道的話,下面賢集網小編來給您說說暫存器是什麼?記憶體 暫存器和儲存器的區別。1 暫存器是什麼?暫存器是 處理器內的組成部分。暫存器是有限存貯容量的高速存貯部件,...