堆栈中的变量顺序(GCC)

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

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

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

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

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

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

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