如果从变量值存在的时间(即生存期)来分,可将程序中的变量分为:动态存储方式和静态存储方式。它们所占用的存储空间区域不同。
C++存储空间区域
代码区:存放可执行程序的程序代码。
静态存储区:存放静态变量和全局变量。
栈区(Stack):存放动态局部变量
堆区(Heap):存放new和 malloc()申请的动态内存。栈区和堆区统称为动态存储区。
动态存储方式
动态存储区可以存放函数的参数、自动变量、函数调用时的现场保护和返回地址等。这些以动态方式存储的数据,在函数调用时分配动态存储空间,函数结束时释放这些空间,在程序执行过程中,这种分配和释放是动态的,如果一个程序两次调用同一函数,则第一次调用时给形参和函数中的局部变量分配内存空间,第一次调用完毕,这些空间被释放。第二次调用时,重新给形参和函数中的局部变量分配内存空间。两次调用过程函数中形参和局部变量的存储空间不同。如果一个程序包含若干个函数,每个函数中的形参和局部变量的生存期并不等于整个程序的执行周期,而是当函数被调用时,动态地分配存储空间,但函数调用完毕,分配的存储空间将被释放。
静态存储方式
以静态存储方式(全局变量和静态局部变量)存储的数据全部存放在静态存储区中,在程序开始运行前就为其分配相应的存储空间,在程序的整个运行期间一直占用,直到这个程序执行完毕后释放。它的生存期就是整个程序的运行期。在程序执行过程中,它们占据固定的存储空间,而不是动态地进行分配和释放。