c++是不能在全域性scope裡寫表示式, 原來一直以為指令的執行都是在main函式裡的. 但c++裡可以呼叫類的建構函式對類初始化. 建構函式顯然不能是在main函式裡呼叫, 那在什麼時候呼叫呢?
是在一段叫做init的**段裡.
linux的elf可執行檔案格式分為若干段:
elf可執行檔案格式
elf header
segment header table
.init 初始化段
.text **段
.rodata 唯讀資料(常量等)
.data 可讀寫資料(全域性變數等)
.bss 未初始化資料
.symtab 符號表(似乎只有全域性的吧)
.debug 除錯資訊
.line 指令和原始檔行對應
.strtab 符號字串實際存放處
section header table
在可執行程式載入時, 在呼叫main函式之前, 會依次呼叫其他東西:
call __libc_init_first
call _init
call atexit
call main
call _exit
而全域性變數的初始化**, 就是在init段裡的.
另外, 在呼叫全域性建構函式的時候, 還會順便呼叫atexit把需要在結束時呼叫的全域性析構函式安裝上. 由於atexit允許安裝多個函式(按安裝的反序執行). 所以不會跟elf載入時在main前面呼叫的那次atexit衝突.
c 全域性變數 靜態全域性變數
全域性變數是靜態儲存方式,靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。區別 雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。靜態區域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能...
python全域性變數的呼叫
背景 在寫介面測試用例的時候,涉及到後續介面需要用到登入後的使用者cookies資訊。於是想將在使用者登入後儲存這個cookies,設定為全域性的變數,其他的用例在setup中去獲取使用者cookie以達到目的。實現方案 單獨定義個處理global的模組,其他需要用到該變數的地方去匯入模組。在set...
javer學c 全域性函式, 全域性變數
extern 全域性c c 中函式預設就是全域性的,變數寫在函式外的話預設也是全域性的.global.cpp,定義乙個全域性變數和乙個全域性函式 c include using namespace std int g int 10 void globalmethod 全域性函式的宣告需要使用exte...