编译器可以改变声明的顺序吗?
在诸如int i, v[5], j;
这样的声明中,变量将如何分配?编译器是否允许更改它们的顺序?
In a declaration such as int i, v[5], j;
, how will the variables be allocated? Is the compiler allowed to change their order?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,编译器可以做任何它想做的事,只要程序的含义保持不变。这些变量可能会被优化而不再存在,仅存储在寄存器中,重新用于其他目的,或根据对齐要求重新排序。
(请注意,编译器无法对结构中的变量重新排序)
Yes, the compiler can do whatever it wants, as long as the meaning of the program stays the same. These variables might be optimized out of existence, stored only in a register, reused for other purposes, reordered for alignment requirments.
(note that a compiler cannot reorder variables within a struct)
是的,编译器可以(并且将会)更改顺序。顺序是特定于编译器的,C 标准中未指定。 C 标准甚至没有指定堆栈应该存在。
Yes, the compiler can (and will) change the order. Ordering is compiler-specific and not specified in the C standards. The C standards don't even specify that a stack should exist.
编译器几乎可以在任何需要的地方分配它们。
The compiler is allowed to allocate them pretty much wherever it wants.