C语言 动态存储与静态存储
一般认为c语言程序在内存中是分成几个存储区来存储代码和数据的:
(1)代码区:C语言源代码经过编译链接后形成可执行的机器代码,这部分代码是CPU执行的指令部分,只读,可共享。
(2)只读数据区:存储程序中不会被改变的数据,如各种常量及符号常量等,这些数据不允许被修改。
(3)静态存储区:全局变量和静态变量都存储在此处,其中初始化的全局变量和静态变量存放在初始化数据区,未初始化的全局变量和静态变量存储在未初始化数据区。未初始化的全局变量和静态变量,系统自动将数值型初始化为0,字符型初始化为'\0'。这些变量只有程序结束才会被释放。
(4)动态存储区:动态存储区又分为堆和桟。
©堆:由程序员进行分配和释放。一般使用malloc()、callocO等函数申请的内存空间都是在堆上,这些内存空间如果不再使用应该由程序员用命令释放。如free()函数,如果程序员不释放,程序结束后可由操作系统回收。
©栈:由编译器自动分配释放。函数中所使用的形参及未加static修饰的普通变量都存储在此处。
这些变量当函数被调用时才会被分配内存空间,一旦函数调用结束,所分配空间马上释放。
所以静态存储区的变量在程序执行的全过程中始终占据着大小固定的存储单元,直到程序运行结束才予以释放。
动态存储的变置是指变量的存储单元在程序运行过程中由系统动态地分配和回收,当定义它们的函数被调用时才会被分配内存空间,函数调用结束,系统收回变量所占内存。
根据变量是静态存储方式还是动态存储方式,可将变量可分为4种:auto变量、static变量、register变量、extern变量。
点击加载更多评论>>