我正在尝试确定一种方法来测试变量在堆栈上的位置(不做常识)。
int main()
{
int i,j;
return 0;
}
声明int i确实没有区别; intj;和int i,j;我可以通过简单地指出地址来判断。我进入堆栈,然后j进入堆栈。但是无论如何,我可以使用内存地址运算符(或指针)告诉这个w / o。
这是一个特定的任务。大概是这样,我可以理解为什么以这种方式实现堆栈的原因。我可以轻松确定它们的位置(是的,它是特定于编译器的,但为简单起见,使用gcc)。
所以是的,我的意思是要在这里用困难的方式做事..弄清楚并演示为什么以及如何以特定方式实现堆栈
我可以添加更多的代码,更多的功能..等等..但是重点是要演示没有
&
的堆栈上的排序 最佳答案
因此,您想查找局部变量的地址而不使用专门设计用于查找变量地址的C运算符。为什么?
值得指出的是,在任何现代编译器/处理器组合中,如果不使用&
运算符,则示例中的i和j可能不在堆栈中。即使您对它们进行了某些处理,以使编译器无法对其进行优化,它仍然可以选择将其放入寄存器中。
编辑:我已经读过您对datenwolf答案的评论,我想我知道您要什么。这是一个可能的答案,但我必须强调,我对您的编译器做出了很大的假设。尤其是,
如果您具有这样的功能:
int f()
{
int i = 1, j = 2;
return 0;
}
您可以使用以下功能检查内存中i,j的顺序:
void order()
{
int a[2];
if (a[0] == 1)
{
printf("i first\n");
}
else
{
printf("j first\n");
}
}
int main()
{
f();
order();
return 0;
}
切勿在真实代码中使用上述类似内容。它依赖于几项正式未定义的行为。
关于c++ - 不使用(&)将变量放在堆栈上的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5141402/