C++-如何判断堆栈是从上往下还是从下往上增长的
刚才自己想出了一个方法,代码如下,请各位指教:
void StackTest()
{
int i = 0;
int j = 0;
int *pi = &i;
int *pj = &j;
if(pi < pj)
cout<<"bottom up"<<endl;
else
cout<<"top down"<<endl;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
编译器其实也不能保证i一定就放在j的前面或者后面的……
如果真要判断的话用一下函数调用比较好:
bool CompareStack(int *p)
{
int newInt;
if(&newInt < p)
return true; //地址递减
else
return false; //地址递增
}
bool GetStackOrder()
{
int oldInt;
return CompareStack(&oldInt);
}
编译选项里面要关掉inline
严格一点来说,只要通过push来查看esp寄存器是怎么变的.你的方法和刚刚的代码都不是很准确。
如果局限于x86处理器的话,不用判断,一定是向低地址增长的,不受应用程序控制。
要想判断也简单,汇编代码push一下,检查ESP寄存器的值是增加了,还是减少了。