C++-作用域和生命周期

来源:互联网 发布:张龙java视频全集 编辑:程序博客网 时间:2024/04/26 15:11

变量类型及生命期

一个程序在其运行期间,它的程序代码和数据会被分别存储在4个不同的内存区域。
这里写图片描述
程序代码区:程序的各函数代码存放在此区域中;

全局数据区:程序的全局数据(如全局变量)和静态数据(static)存放在此区域中;此区域中的数据由C++编译器建立,对于定义时没有初始化的变量,系统会自动将其初始化为0。这个区域中的数据会一直保存,直到程序结束时才由系统负责回收。

栈区:程序的局部数据(在函数中定义的数据)存放在此区域中;需要注意static类型的局部变量存储在此。只有当函数被调用时,系统才在栈区中为它们分配存储空间,并且不会对分配的存储单元做初始化,一旦函数调用完成,系统就会回收这些变量在栈区中的存储单元。

堆区:程序的动态数据(new,malloc)就在此区域中分配存储空间;用完之后由程序员用delete或free将其归还给系统。

静态变量可分为静态全部变量和静态局部变量,前者的作用于是整个程序范围,后者的作用域局限于定义它的语句块。静态局部变量的作用域与普通局部变量的作用域是相同的,但它与全局变量有着同样的生命期。

变量初始化

未提供初始化的全局数据区中的变量将被系统自动初始化为0,堆和栈中的变量不被初始化。

局部变量与函数返回地址

当使用指针或引用从函数中返回一个地址时需要小心,一定不要返回局部变量的指针或引用。

0 0