C++基础知识1--局部变量、全局变量、静态变量、Extern修饰变量
C++语言中有非常重要的概念就是变量的作用域,在这里面比较熟悉的是局部变量、全局变量和静态变量,也是小型的程序中最常用的三种变量类型。
从作用域上来看局部变量一般见于函数内部,随着函数的调用开始而被创建,随着函数的调用结束而被销毁,是不需要程序员手动做的,这个过程由编译器来操作,局部变量存在于运行栈上。
全局变量的生命周期比较长随着程序的编译而被创建,随着程序的运行结束而被销毁,要注意,全局变量的值需要在编译时就被确定,编译时确定不了的全局变量会被放到特殊的地址段中,叫做bbs段。另外的一点非常重要的就是extern关键字是用来修饰全局变量的,被extern修饰的全局变量可以在不同的文件之间被使用,但是如果是被static修饰的变量虽然是静态的存放在堆区,跟初始化的全局变量存放在一样的位置,但是不可以被跨文件调用,所以说static关键字可以起到限制变量文件域的作用。
另外一个要说的知识点就是关于内存的5分问题,一般来讲,程序运行的时候,内存会被划分为5个不同的段,也就是bbs、数据段、代码段、堆、栈五个部分,这五个部分存放着程序编译和运行时不同类型的变量,所以说要提到变量类型,就也要提到这5个不同的内存段落。
首先是bbs,这个不用说了,未初始化的全局变量就是存放在这里面的;
然后是数据段,这数据段的概念其实还蛮抽象的,似乎所有的东西都可以称之为数据段,但是吧其实我们这里面的数据段指的是专门存放初始化的全局变量的内存段,还记得在计算机组成原理的课程上,mars在运行mips指令的时候会有.data作为说明,让我们初始化一些全局变量,这个就是初始化的全局变量的概念;
然后是代码段,代码段其实对应的是存储运行指令的内存段,依然想起来计算机组成原理课程上面对的.text,.text里面对应的就是一堆的基本指令集的语句,这些语句被翻译成01代码之后就会存放在代码段(感觉计算机组成原理还是很有用的);
接着是堆,这个概念就比较熟悉了,这是因为我们在编程语言中会经常接触这个概念,堆主要是用于存储动态分配的内存的,是从低到高增长的,比如我们常见的vector就是存放在堆区的,也包括我们malloc一段内存,这些都是存放在