gpt4 book ai didi

c - 为什么我的内存布局不同?

转载 作者:太空狗 更新时间:2023-10-29 15:53:33 29 4
gpt4 key购买 nike

以下代码片段:

void (*foo)();
char X[1];
char Y[10];

可以直观地给我一种可能的堆栈布局:

|  Y[10]  |
|---------|
| X[1] |
|---------|
| foo |
|---------|

我通过使用以下方法生成 ASM 文件对此进行了检查:

gcc -S -o stack stack.c

然后我观察到这些变量的压入顺序是不同的。所以,如果我不小心做了一个 X[1],我期待解决 Y[0] 但在实际布局中,写一些东西到 X[1] 覆盖分配给 foo 的内存位置的第一个字节。重组是编译器优化步骤还是有人可以告诉我为什么会这样?

最佳答案

为什么说“应该”

当然,您建议的堆栈布局将是一种特定的——非常明显的——实现自动变量的方法的结果,但没有什么需要它。

因此,没有“应该”


要强制内存中某些项目的顺序以便您可以玩(行为未指定,完全不安全且不可移植!)覆盖游戏,请使用 struct 和编译器的填充 #pragma s.

关于c - 为什么我的内存布局不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3979880/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com