C 變數名放哪了

2021-05-27 09:09:32 字數 973 閱讀 4833

解釋1:

c++對變數名不作儲存,在彙編以後不會出現變數名,變數名作用只是用於方便編譯器成彙編**,是給編譯器看的,是方便人閱讀的。

……int n=5;……

編譯器編譯它時,產生類似mov [0x00410fc0],5的指令,即:把5放在該記憶體位址的空間上。其中並沒有出現n,n只是編譯時供編譯器識別的名字,是乙個高階語言抽象出來的概念,在真實執行的程式中並不存在n,至於n的位址是0x00410fc0還是其他的什麼,這是由聯結器(linker)決定的,聯結器把全域性變數放在.exe檔案中,執行.exe檔案時全域性變數在類似0x00430000左右的位址。區域性變數在棧上,一般位址為0x00120000左右。

解釋2:(類似1)

提問:

……

int n=5;

……假如執行時n的位址是0xffbffb0c;請問系統執行時是怎麼把n和0xffbffb0c關聯起來的,系統是直接找0xffbffb0c,還是找n?0xffbffb0c還需要存放到什麼地方麼?

回答:

這不是一言兩語可以說清的。你需要理解cpu指令、彙編、windows作業系統與c++編譯器的運作原理。

對於int n = 5;首先要說明n的位址更有可能是0x00410fc0,靠近頂端位址是存放核心資料的

編譯器編譯它時,產生類似mov [0x00410fc0],5的指令,其中並沒有出現n,n只是編譯時供編譯器識別的名字,是乙個高階語言抽象出來的概念,在真實執行的程式中並不存在n,至於n的位址是0x00410fc0還是其他的什麼,這是由聯結器(linker)決定的,聯結器把全域性變數放在.exe檔案中,執行.exe檔案時全域性變數在類似0x00430000左右的位址。區域性變數在棧上,一般位址為0x00120000左右。

位址0xffbffb0c並不需要乙個位址去存放它,因為在最後產生.exe檔案它自己知道它需要的乙個值存放在什麼位址,所以就在它的二進位制**中把0xffbffb0c硬編碼進來了

變數名命名

有些東西不明確寫出來就難以確定下來,個人寫 的命名風格一直沒有穩定下來,今天寫個筆記明確幾類主要的命名,希望可以逐步養成自己的程式設計風格。1.類名 型別名 t 每個單詞首字母大寫 例 t typename 2.列舉型別 反應型別的複數形式 例 enum colors 3.函式名 每個單詞首字母大寫...

變數名提公升

預解析的過程 的執行過程 程式在執行過程,會先將 讀取到記憶體中檢查,會將所有的宣告在此時進行標記。所謂的標記就是讓js直譯器直到有這個名字,後面在使用名字的時候,不會出現未定義的錯誤,這個標記就是提公升 宣告 名字的宣告,識別符號的宣告 變數名的提公升 函式的宣告 函式宣告與函式表示式有區別,函式...

Oracle中的替換變數, 變數名, 變數名

替換變數 僅用於sql plus或者用於原理和sql plus相同的開發工具 臨時儲存值 利用它可以達到建立通用指令碼的目的 利用它可以達到和使用者互動,故在sql plus中又稱互動式命令 替換變數的格式式在變數名稱前加乙個 以便在執行sql命令時提示使用者輸入替換資料,然後按輸入資料執行sql命...