您的位置:首页 > 其它

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

2013-04-15 02:26 316 查看


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

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

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;

}


编译器其实也不能保证i一定就放在j的前面或者后面的……

如果真要判断的话用一下函数调用比较好:

bool CompareStack(int *p)

{

int newInt;

if(&newInt < p)

return true;         //地址递减

else

return false;        //地址递增

}

bool GetStackOrder()

{

int oldInt;

return CompareStack(&oldInt);

}


编译选项里面要关掉inline
传递的参数是个指针,指向了上一级调用的局部变量。而这一级调用的局部变量在堆栈里肯定是堆在更上面的地方的。也就是说比较的是两层调用的局部变量的地址

如果局限于x86处理器的话,不用判断,一定是向低地址增长的,不受应用程序控制。
在X86平台linux下,用malloc等函数分配的内存的地址是向上增长的。而堆栈段(注意,堆栈是Stack,堆是Heap,不是同一个东西)地址是向下增长的。

要想判断也简单,汇编代码push一下,检查ESP寄存器的值是增加了,还是减少了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: