动态存储方式
动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。
动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。
如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。
动态存储区:
1.栈和堆
栈stack: 由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。
堆heap:堆允许程序在运行时动态地申请某个大小的内存。一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。堆和数据结构中的堆栈不一样,其类是与链表。
2.局部自动变量
存放在栈区,在栈区里面其实又可以分成好几个区域,他们叫做栈桢,一个栈桢就是一个函数,需要调用该函数的时候就如入栈,函数return的时候就会弹出栈,所以他们的生命周期是从函数的开始直到函数结束。
而栈帧里面又存放着什么呢,栈帧存放着以下几种东西:参数变量的地址,局部变量的地址,return的地址(还有栈指针和基指针,想知道这个是就什么百度吧)
3.自动变量(未加static声明的局部变量) ;
4.函数调用时的现场保护和返回地址等;
5.动态变量
通常是由malloc new等分配的空间,生命周期是从分配的那一刻直到free结束。
-----------------------------------------------------------------------------------------------------------------
静态存储方式
静态存储方式是指在程序编译期间分配固定的存储空间的方式。
该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。全局变量,静态变量等就属于此类存储方式。
静态存储区:
一定会存在的而且会永恒存在、不会消失,这样的数据包括常量、常变量(const 变量)、静态变量、全局变量等。
静态 、常量、全局变量就是存放在静态存储区,生命周期由程序开始编译至程序结束。