在c中保留堆栈上的缓冲区时。存储元素的顺序是什么?
示例:
char buf[4];
让我们说堆栈现在看起来像这样:
return addr
basepointer
buf
buf
buf
buf <-stack pointer points here
然后你这样做:
myArray[0]=6;
堆栈是否如下所示:
return addr
basepointer
buf
buf
buf
6 <-stack pointer points here
或者喜欢:
return addr
basepointer
6
buf
buf
buf <-stack pointer points here
如果你有一个int数组并在其中一个数组索引中存储一个int,那该怎么办呢? int的第一个字节是在底部(靠近堆栈指针)还是在顶部(靠近basepointer)?
答案 0 :(得分:2)
对此没有一般性的答案,由编译器决定如何布局变量。不同的编译器可以做出不同的选择,具有不同编译标志的相同编译器也可以导致不同的选择。它甚至可能(虽然通常不太可能也不希望)相同的编译器和标志从不同的编译中产生不同的结果。