我有這樣的代碼寫在C:我理解堆棧嗎?請指正
int main(){
double x, y;
int a, b, c;
int *p;
,我有:
sizeof(int)=4
sizeof(double)=8
是內存結構某事像這樣? 在圖形模式下更詳細:
IN MEMORY:(whole memory)
LE = Little Endian (INTEL)
BE = Big Endian (MIPS)
------------------
0x00000000 | | ?
------------------
. .
. .
. .
------------------
0x0012ff60 | 64(LE) 00(BE) |
------------------
------------------
0x0012ff61 | ff(LE) 12(BE) |
------------------
------------------
0x0012ff62 | 12(LE) ff(BE) |
------------------
------------------
0x0012ff63 | 00(LE) 64(BE) |
------------------
------------------
0x0012ff64 | 00(LE) 00(BE) | c if c = 256 (base10)
------------------ c = 0x00000100 (base16)
------------------
0x0012ff65 | 01(LE) 00(BE) | c 0x0012ff64 points to c variable
------------------ 0x0012ff64 is a pointer
------------------
0x0012ff66 | 00(LE) 01(BE) | c
------------------
------------------
0x0012ff67 | 00(LE) 00(BE) | c
------------------
------------------
0x0012ff68 | | b
------------------
.
.
.
------------------
0x0012ff6c | | a
------------------
.
.
.
------------------
0x0012ff70 | | y
------------------
------------------
0x0012ff71 | | y
------------------
------------------
0x0012ff72 | | y
------------------
------------------
0x0012ff73 | | y
------------------
------------------
0x0012ff74 | | y
------------------
------------------
0x0012ff75 | | y
------------------
------------------
0x0012ff76 | | y
------------------
------------------
0x0012ff77 | | y
------------------
.
.
.
------------------
0x0012ff78 | | x
------------------
.
.
.
------------------
0xfffffffff | | ?
------------------
我的問題: 當我們將某物分割棧,我們該怎麼做呢?
1)我的意思是我們推動數據在地址的更高值的堆棧結束?
2)或者我們在地址較低的地方將數據壓入棧頂?
3)每個堆棧有多少內存地址?取決於什麼?
感謝
ebb寄存器不指向返回指令指針,而是指向前一個函數的ebp – BlackBear
不要忘記,編譯器可以(也可能)將局部變量存儲在寄存器中 - 部分或全部可能不會在所有的堆棧。 – Brendan
請注意,即使EBP寄存器的含義可能依賴於編譯器:當使用優化時,甚至可能根本不使用EBP。但是在大多數情況下,x86機器上的堆棧就像你理解的那樣工作。但是在x86上,所有的數據都是小端的! –