所位資料對齊,是指資料所在的記憶體位址必須是該資料長度的整數倍,dword資料的記憶體起始位址能被4除盡,word資料的記憶體起始位址能被2除盡,x86 cpu能直接訪問對齊的資料,當他試圖訪問乙個未對齊的資料時,會在內部進行一系列的調整,這些調整對於程式來說是透明的,但是會降低執行速度,所以編譯器在編譯程式時會盡量保證資料對齊。同樣一段**,我們來看看用vc、dev-c++和lcc三個不同編譯器編譯出來的程式的執行結果:
這是用vc編譯後的執行結果:#include int main()
0x0012ff7c
0x0012ff7b
0x0012ff80
變數在記憶體中的順序:b(1位元組)-a(4位元組)-c(4位元組)。
這是用dev-c++編譯後的執行結果:
0x0022ff7c
0x0022ff7b
0x0022ff74
變數在記憶體中的順序:c(4位元組)-中間相隔3位元組-b(佔1位元組)-a(4位元組)。
這是用lcc編譯後的執行結果:
0x0012ff6c
0x0012ff6b
0x0012ff64
變數在記憶體中的順序:同上。
三個編譯器都做到了資料對齊,但是後兩個編譯器顯然沒vc「聰明」,讓乙個char佔了4位元組。
C 函式返回區域性變數
原因 返回值是拷貝值,區域性變數的作用域為函式內部,函式執行結束,棧上的區域性變數會銷毀,記憶體釋放。可返回的區域性變數 1.返回區域性變數本身 int sum int a,int b 2.常量 char returnvalue warning deprecatedconversion from s...
C 函式返回區域性變數
目錄2 可返回的區域性變數 示例 int get 或 char getmemory void 示例 int sum int a,int b 常量 char getmemory void 示例 const char getmemory void 或者int returnvalue return val...
python中函式的區域性變數
1 def discount price,rate 定義函式名discount,兩個形式引數price和rate sell price price rate return sell price 函式返回售價 price float input please input the price 此處接受輸...