zoukankan      html  css  js  c++  java
  • 3、对变量在栈上存储顺序,及函数返回值与参数在栈上存放顺序的思考(1)

        一直以来,在思考函数调用中,其参数,返回地址的关系。在以前的一篇文章中,也曾看到过这种关系:

        函数在堆栈中的分布情况是,地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段。[1]

    于是,我进行了测试。我们都知道:在函数内定义的普通变量放在栈上,而只有用malloc,new等申请的内存,才放在堆上。用static标识的变量,和全局变量一样,放在全局存储区。[2]

    而在栈上存放的变量,一般都是按照地址从高到低的顺序存放。所以,分几步测试。用VS2005GCC分别进行。

    1)测试在栈上存放的变量,一般都是按照地址从高到低的顺序存放。

    VS2005

    #include "stdafx.h"

    #include <stdio.h>

    #include "iostream"

    using namespace std;

    int main()

    {

    int a;

    int b;

    cout << &a <<endl

         << &b <<endl;

    }


        我们可观察到,其在栈内,两个变量是按由高到低的顺序存放的。可是,为什么却占用了12个字节呢?

    当我们将编译选项由debug,变为release后,其显示如下所示:

    也就是此时,是4个字节。我的机器是32位的。可见,显示的不同,是由编译选项的不一样而引起的,这是编译器对内存进行优化而得到的结果。(具体是怎么样一个做法,相请高人解释)

    当我们用GCC编译器时,其结果如下所示:

        由上可见,对于这个概念,是没有什么异议的。

    参考:

    [1] http://www.cnblogs.com/mydomain/archive/2010/07/27/1785667.html

    [2] 变量的生存期和作用域

    http://blog.163.com/zhoumhan_0351/blog/static/39954227200982104921868/

  • 相关阅读:
    【codevs1227】方格取数2(最大流费最大流-模板
    【ZJOI2008】【BZOJ1033】杀蚂蚁(占坑待填
    python基础学习1-流程控制和判断
    python基础学习1-变量定义赋值,屏幕输入输出
    Jzoj5237 最长公共子序列
    Jzoj5236 利普希茨
    [置顶] 欢迎使用CSDN-markdown编辑器
    Jzoj5235 好的排列
    Jzoj5234 外星人的路径
    Jzoj5231 序列问题
  • 原文地址:https://www.cnblogs.com/mydomain/p/1791532.html
Copyright © 2011-2022 走看看