堆栈中的变量顺序(GCC)

时间:2012-03-02 14:57:25

标签: c variables gcc stack

在GCC中编译C代码时,是否有任何方法可以保证堆栈变量按照我声明的顺序出现在堆栈中(或者按相反顺序,对我来说无关紧要)?我知道这可能是通过结构,但我宁愿不使用它们。

3 个答案:

答案 0 :(得分:4)

唯一的方法是一个结构,它包含您喜欢的顺序中的所有变量。

对于局部变量,编译器可以按任何适合她的顺序自由重新排序/重用变量。有些变量根本没有内存位置,它们只存在于寄存器中,其他变量将完全优化。

答案 1 :(得分:0)

如果您坚持不想使用结构,则必须使用alloca()自行分配堆栈内存。但是,您需要在该堆栈内存中手动管理本地变量。

我不建议你这样做。使用结构。

答案 2 :(得分:0)

最可靠的方法是使用gcc -S指示gcc生成汇编语言输出,并检查汇编语言输出以找出放在哪里的变量。如果编译没有优化,变量可能不会被删除或重新排列,如果为每个局部变量分配不同的值,应该很容易发现每个变量。

我承认这不是很高科技。但是如果你想确保gcc生成的代码以特定方式工作,你将不得不查看它生成的代码......

相关问题