低效的靜態變數

2021-06-21 23:56:44 字數 454 閱讀 3155



如果我們對c語言模型不了解的話,往往會認為區域性變數使用的記憶體用到的時候才被分配出來,而靜態變數是一開始

就分配好的,所以靜態變數會有更高的執行效率(事實上,我必須說我也一直是這麼認為的)

(解釋**於:雲風著:我的程式設計感悟)但是這是乙個天大的誤會,區域性變數存放於堆疊上,對其空間的分配,僅僅只是在乙個變數宣告的語句段中,

僅依靠單次的修改esp暫存器就可以實現(一組區域性變數的宣告只用做一次這種操作,而不是每個變數一次)

函式能重複使用同一記憶體區域。

當前的函式退出了,棧記憶體空間被**,呼叫新的函式中時,區域性變數又重新使用了相同位址的記憶體。

當同一塊記憶體被反覆讀寫,其資料就會存在於cpu的內部一級快取中,訪問速度非常快。

絕大多數情況下,堆疊頂部的資料就符合這個條件,而零散的靜態變數則沒有這個優勢,記憶體同cpu內部快取

的資料交換,往往成為程式的速度瓶頸。

靜態變數 非靜態變數的區別

c 變數根據定義位置的不同,具有不同的作用域,作用域可分為6種 全域性作用域,區域性作用域,語句作用域,類作用域,命名作用域和檔案作用域。從作用域看 全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字...

靜態變數和非靜態變數

class string1 a和b編譯報錯,can not make a static referrence to no static filed s3,s4 分析 string s1 pingguo string s2 xiangjiao string s3 new string lizi str...

變數 靜態變數

變數 全域性變數 外部變數 在函式外部定義,以及被本程式所有物件或函式引用。區域性變數 內部變數 由某個函式或物件建立,只能被內部引用,而無法被其他物件或函式引用。特點 該變數在全域性資料區分配記憶體 未經初始化的靜態全域性變數會被程式自動初始化為0 在函式體內宣告的自動變數的值是隨機的,除非它被顯...