在GCC中编译C代码时,是否有任何方法可以保证堆栈变量按照我声明的顺序出现在堆栈中(或者按相反顺序,对我来说无关紧要)?我知道这可能是通过结构,但我宁愿不使用它们。
答案 0 :(得分:4)
唯一的方法是一个结构,它包含您喜欢的顺序中的所有变量。
对于局部变量,编译器可以按任何适合她的顺序自由重新排序/重用变量。有些变量根本没有内存位置,它们只存在于寄存器中,其他变量将完全优化。
答案 1 :(得分:0)
如果您坚持不想使用结构,则必须使用alloca()
自行分配堆栈内存。但是,您需要在该堆栈内存中手动管理本地变量。
我不建议你这样做。使用结构。
答案 2 :(得分:0)
最可靠的方法是使用gcc -S
指示gcc生成汇编语言输出,并检查汇编语言输出以找出放在哪里的变量。如果编译没有优化,变量可能不会被删除或重新排列,如果为每个局部变量分配不同的值,应该很容易发现每个变量。
我承认这不是很高科技。但是如果你想确保gcc生成的代码以特定方式工作,你将不得不查看它生成的代码......