跨平台系统栈的增长方向判断

来源:互联网 发布:java多线程 volatile 编辑:程序博客网 时间:2024/05/07 01:29

对于一个用惯了i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。C是一个不错的选择。那接下来的问题就是如何用
C
在哪里会用到栈呢?稍微了解一点
等一下,怎么比较两个变量的地址呢?先声明的先入栈
那就函数加个参数,比较参数和局部变量的位置,参数肯定先入栈。那为什么不能局部变量先入栈?第一反应是怎么可能,但仔细想来又没有什么不可以。所以,这种方法也依赖于编译器的实现。
不妨回想一下,函数如何调用。执行一个函数时,这个函数的相关信息都会出现栈之中,比如参数、返回地址和局部变量。当它调用另一个函数时,在它栈信息保持不变的情况下,会把它调用那个函数的信息放到栈中。
比如,设计两个函数,一个作为调用方,另一个作为被调用方。被调用方以一个地址(也就是指针)作为自己的入口参数,调用方传入的地址是自己的一个局部变量的地址,然后,被调用方比较这个地址和自己的一个局部变量地址,由此确定栈的增长方向。
好了,既然有了这个了解,显然可以扩展一下前面的解决方案,可以两个栈帧内任意的东西进行比较,比如,各自的入口参数,都可以确定栈的增长方向。

int func1();

 int func(){

     int a =1;

     cout  <<  &a << endl;

     func1();

     return 0;

 }

 int func1(){

     int b =2;

     cout << &b << endl;

     return 0;

 }

同学说过操作系统中“栈从上向下增长,堆从下向上增长;栈的地址减小,堆的地址增加”;在网上也看到过这样的说法,现在验证一下看来在windowxp和visual studio2008下是正确的。

0 0