C++-如何判断堆栈是从上往下还是从下往上增长的

发布于 2016-11-22 00:13:03 字数 336 浏览 1292 评论 3

刚才自己想出了一个方法,代码如下,请各位指教:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜柠檬 2017-10-25 02:45:10

编译器其实也不能保证i一定就放在j的前面或者后面的……
如果真要判断的话用一下函数调用比较好:

bool CompareStack(int *p)
{
int newInt;
if(&newInt < p)
return true; //地址递减
else
return false; //地址递增
}

bool GetStackOrder()
{
int oldInt;
return CompareStack(&oldInt);
}

编译选项里面要关掉inline

虐人心 2017-08-16 05:29:51

严格一点来说,只要通过push来查看esp寄存器是怎么变的.你的方法和刚刚的代码都不是很准确。

虐人心 2017-03-22 13:26:51

如果局限于x86处理器的话,不用判断,一定是向低地址增长的,不受应用程序控制。
要想判断也简单,汇编代码push一下,检查ESP寄存器的值是增加了,还是减少了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文