C 中函式內區域性變數的位元組對齊

2021-08-30 20:49:15 字數 664 閱讀 4418

所位資料對齊,是指資料所在的記憶體位址必須是該資料長度的整數倍,dword資料的記憶體起始位址能被4除盡,word資料的記憶體起始位址能被2除盡,x86 cpu能直接訪問對齊的資料,當他試圖訪問乙個未對齊的資料時,會在內部進行一系列的調整,這些調整對於程式來說是透明的,但是會降低執行速度,所以編譯器在編譯程式時會盡量保證資料對齊。同樣一段**,我們來看看用vc、dev-c++和lcc三個不同編譯器編譯出來的程式的執行結果:

#include int main()

這是用vc編譯後的執行結果:

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 此處接受輸...