【发布时间】:2014-03-18 08:32:08
【问题描述】:
我有这段代码是用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
-
不要忘记编译器可以(并且可能会)将局部变量存储在寄存器中 - 其中一些或全部可能根本不在堆栈上。
-
请注意,即使 EBP 寄存器的含义也可能取决于编译器:使用优化时,甚至可能根本不使用 EBP。然而,在大多数情况下,x86 机器上的堆栈就像您理解的那样工作。但是在 x86 上,所有数据都是小端的!
标签: variables memory assembly x86 stack