我的代码用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)每个堆栈占用多少内存地址?这取决于什么?
由于
答案 0 :(得分:3)
在x86计算机上 ,如果编译器没有做任何特别的事情,堆栈将向下增长。在push
上,堆栈指针将按推送的大小递减,push
ed数据将转到堆栈的较低地址。
在pop
上,堆栈指针将以pop的大小递增。
我不是在评论MIPS,即使你在问题中提到它,因为:
x86
。关于堆栈上每个变量的大小,这是100%编译器相关的,所以我不能对此发表评论。