2020-11-28(全局变量和局部静态变量)
常量和全局變量有著相似的特征,都是在程序執行前就存在了。在大多數情況下,在PE文件中的只讀數據節中常量的節屬性被修飾為不可寫;而全局變量和靜態變量則在屬性為可讀寫的數據節中。
具有初始值的全局變量,其值初始值的全局變量,其值在鏈接時被寫入所創建的PE文件中,誕生于所在執行文件被操作系統加載后,執行第一行代碼前,這個時候就已經具有內存地址了。
在訪問方式上,局部變量的訪問時通過棧指針相對間接訪問,而全局變量的內存地址在全局數據區,通過棧指針無法訪問到 ,但 由于全局變量在編譯期就已經確定了具體的地址,因此編譯器在編譯的過程中可以計算出一個固定的地址值,利用這個立即數(地址值)去間接訪問。
靜態變量分為局部靜態變量和全局靜態變量,全局靜態變量和全局變量類似,只是全局靜態變量只能在文件內使用,相當于全局靜態變量等價于編譯器限制外部源碼文件訪問的全局變量。
局部靜態變量會預先被在作為全局變量處理,而它的初始化部分只是在做賦值操作而已,那么我們是否會有這么一個疑問,是不是每次進入函數內部,我們都要給這個局部靜態變量賦值一次呢?
當然不是啦,第一次賦值后,局部靜態變量附近會產生一個標志,這個標志占一個字節。通過位運算,將標志中的一位數據置1,以此判斷局部靜態變量是否已經被徹底初始化過。由于一個靜態變量只是用一位,而一個字節是8位,因此這個標志可以同時表示8個局部靜態變量的初始狀態。
總結
以上是生活随笔為你收集整理的2020-11-28(全局变量和局部静态变量)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-11-27(下标寻址和指针寻址
- 下一篇: 2020-11-28(不定参数的函数)