C 编译器可以更改声明的顺序吗?

C 编译器可以更改声明的顺序吗?,c,standards,C,Standards,在声明中,例如inti,v[5],j,如何分配变量?编译器可以更改它们的顺序吗?编译器可以将它们分配到它想去的任何地方。编译器可以将它们分配到它想去的任何地方。是的,只要程序的意思保持不变,编译器可以做它想做的任何事情。这些变量可能在不存在的情况下进行优化,只存储在寄存器中,重新用于其他目的,根据对齐要求重新排序 (请注意,编译器无法对结构中的变量重新排序)是的,只要程序的含义保持不变,编译器可以执行任何它想要的操作。这些变量可能在不存在的情况下进行优化,只存储在寄存器中,重新用于其他目的,根据

在声明中,例如
inti,v[5],j,如何分配变量?编译器可以更改它们的顺序吗?

编译器可以将它们分配到它想去的任何地方。

编译器可以将它们分配到它想去的任何地方。

是的,只要程序的意思保持不变,编译器可以做它想做的任何事情。这些变量可能在不存在的情况下进行优化,只存储在寄存器中,重新用于其他目的,根据对齐要求重新排序


(请注意,编译器无法对结构中的变量重新排序)

是的,只要程序的含义保持不变,编译器可以执行任何它想要的操作。这些变量可能在不存在的情况下进行优化,只存储在寄存器中,重新用于其他目的,根据对齐要求重新排序


(请注意,编译器无法对结构中的变量重新排序)

是的,编译器可以(也将)更改顺序。排序是特定于编译器的,在C标准中没有指定。C标准甚至没有指定堆栈应该存在。

是的,编译器可以(并且将)更改顺序。排序是特定于编译器的,在C标准中没有指定。C标准甚至没有规定堆栈应该存在。

我认为OP是询问分配的顺序,而不是堆栈的哪个部分。我想,在C中,这包括初始化(只要初始化不依赖于外部因素)@Mahesh:对于自动变量,分配的顺序定义了堆栈的哪一部分?我认为OP是询问分配的顺序,而不是堆栈的哪一部分。我想,在C中,这包括初始化(只要初始化不依赖于外部因素)@Mahesh:对于自动变量,分配顺序定义堆栈的哪一部分?一如既往,为什么?如果要依赖(相对)(堆栈?)位置,请使用a对变量进行分组。否则,使用调试信息进行编译,并从调试中获得确切的堆栈布局information@sehe每件事都有理由吗?我只是想知道。:)是的。如果答案是肯定的,编译器有一个理由。如果答案是否定的,则编译器/标准有其原因。正是这个原因,你本质上是在质疑自己。如果你想要事实,你就不能唾弃理性分析。一如既往,为什么?如果要依赖(相对)(堆栈?)位置,请使用a对变量进行分组。否则,使用调试信息进行编译,并从调试中获得确切的堆栈布局information@sehe每件事都有理由吗?我只是想知道。:)是的。如果答案是肯定的,编译器有一个理由。如果答案是否定的,则编译器/标准有其原因。正是这个原因,你本质上是在质疑自己。如果你想要事实,就不能在rational analysis上吐痰。虽然可以添加对齐和填充,但排序在结构中保留。尽管可以添加对齐和填充,但排序在结构中保留。