如何判断堆栈是从上往下还是从下往上增长的
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寄存器的值是增加了,还是减少了。
相关文章推荐
- [笔试题] 如何判断主机是大端还是小端(字节序)
- 如何判断是自己进入app还是浏览者进入app
- 如何判断一个C++对象是否在堆栈上
- php如何判断用户通过手机wap访问还是电脑直接访问
- C# 如何判断系统是32位还是64位
- VC++如何判断当前操作系统是32位还是64位?
- 如何判断栈的增长方向
- C# 如何判断系统是64位还是32位
- 在php中,如何判断一个请求是ajax请求还是普通请求? jquery
- Android ViewPager 如何判断当前页面是从前一页还是后一页滑动过来
- C#如何判断操作系统位数是32位还是64位
- 如何在代码中判断当前设备是iPhone 4/4S还是iPhone 5?
- android 如何判断activity是否是暂停之后回来的还是重新打开的
- 在一个form中有两个submit,值分别为修改和删除,如何在提交时用js判断submit值为修改还是删除呢
- 如何判断自己IP是内网IP还是外网IP
- Android中如何判断是手机还是平板
- 安装会声会影时如何判断电脑是32位还是64位
- 如何判断自己的IP是公网ip还是内网ip
- 如何判断机器的字节顺序是高字节在前还是低字节在前
- 如何判断PHP 是ts还是nts版的