【C++】自动存储持续性、自动变量和栈

举报
王博Kings 发表于 2020/12/29 23:41:49 2020/12/29
【摘要】 目录 1. 自动存储持续性 2. 自动变量和栈  1. 自动存储持续性 在默认情况下,在函数中声明的函数参数和变量的储存持续性为自动,作用域为局部,没有链接性。也就是说,如果在main()中声明了一个名为texas的变量,并在函数oil()中也声明了一个名为texas变量,则创建了两个独立的变量——只有在定义它们的函数中才能使用它们。  另外,当程序开始执行这些变量...

目录

1. 自动存储持续性

2. 自动变量和栈


 1. 自动存储持续性

在默认情况下,在函数中声明的函数参数和变量的储存持续性为自动,作用域为局部,没有链接性。也就是说,如果在main()中声明了一个名为texas的变量,并在函数oil()中也声明了一个名为texas变量,则创建了两个独立的变量——只有在定义它们的函数中才能使用它们。 
另外,当程序开始执行这些变量所属的代码块时,将为其分配内存:当函数结束时,这些变量都将消失。 
如果在代码块中定义了变量,则该变量的存在时间和作用域将被限制在该代码块内。例如:
 


      int main()
      {
      int teledeli = 5;
       {   //websight allocated
      cout << "Hello\n";
      int websight = -2;  //websight scope begins
      cout << websight << ' ' << teledeli << endl;
       }   //websight expires
      cout << teledeli << endl;
      }   //teledeli expires
  
 

当内部代码块的变量也为teledeli,程序执行内部代码块中的语句时,将teledeli解释为局部代码块变量。 
即:新的定义隐藏了以前的定义,新定义可见,旧定义暂时不可见。在程序离开该代码块时,原来的定义又重新可见。


      #include<iostream>
      #include<fstream>
      using namespace std;
      int main()
       {
      int teledeli = 5;
       {
      int teledeli = -2;
      cout << teledeli << endl;
       }
      cout << teledeli << endl;
      }   //teledeli expires
  
 

答案:-2   5

2. 自动变量和栈

由于自动变量地数目随函数的开始和结束而增减,因此程序必须在运行时对自动变量进行管理。常用地方法是留出一段内存,并将其视为栈,以管理变量的增减。之所以被称为栈,是由于新数据被象征性地放在原有数据的上面,当程序使用完后,将其从栈中删除。栈的默认长度取决于实现,但编译器通常提供改变栈长度的选项。 
程序使用两个指针来跟踪栈,一个指针指向栈底——栈的开始位置,另一个指针指向堆顶——下一个可用内存单元。当函数被调用时,其自动变量将被加入到栈中,栈顶指针指向变量后面的下一个可用的内存单元。函数结束时,栈顶指针被重置为函数被调用前的值,从而释放新变量使用的内存。

9.2.2

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/96153079

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。