在 C 语言中,内存分配方式有以下三种形式:
1、从静态存储区域分配由编译器自动分配和释放,在程序编译的时候就已经分配好内存,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与 static 变量 。
2、在栈上分配同样由编译器自动分配和释放,在函数执行时,函数内部的局部变量都可以在栈上创建,函数执行结束时,这些存储单元将则被自动释放 。
需要注意的是,栈内存分配运算内置于处理器的指令集中,它的运行效率一般很高,但是分配的内存容量有限 。
![C语言的内存分配方式:堆和栈](http://img.jiangsulong.com/220401/2144593105-0.jpg)
文章插图
3、从堆上分配也称为动态内存分配,由程序员手动完成申请和释放 。程序在运行的时,由程序员使用内存分配函数(如 malloc 函数)来申请内存,使用完之后再由程序员自己负责使用内存释放函数(如 free 函数)来释放内存 。
需要注意的是,如果在堆上分配了内存空间,就必须及时释放它,否则将会导致运行的程序出现内存泄漏等错误 。在 C 语言中,不同类型变量的存储位置和作用域也有所不同 。
全局变量从静态存储区域分配,其作用域是全局作用域,也就是整个程序的生命周期内都可以使用 。如果程序是由多个源文件构成的,那么全局变量只要在一个文件中定义,就可以在其他所有的文件中使用,但必须在其他文件中通过使用extern关键字来声明该全局变量 。
全局静态变量从静态存储区域分配,其生命周期也是与整个程序同在的,从程序开始到结束一直起作用 。与全局变量不同的是,全局静态变量作用域只在定义它的一个源文件内,其他源文件不能使用 。
局部变量从栈上分配,其作用域只是在局部函数内,在定义该变量的函数内,只要出了该函数,该局部变量就不再起作用,也即该变量的生命周期和该函数同在 。
局部静态变量从静态存储区域分配,其在第一次初始化后就一直存在直到程序结束 。该变量的特点是其作用域只在定义它的函数内可见,出了该函数就不可见了 。
【C语言的内存分配方式:堆和栈】
推荐阅读
- 男女之间存在暧昧关系的5种表现 异性朋友很暧昧的表现
- 帝国CMS列表页面调用关键字TAG的方法
- 美到心碎的唯美爱情说说带图片 失望心凉的唯美图片
- 判断当前的浏览器是pc还是移动设备,对应跳转方法
- 岁月静好的爱情哲理句子 希望两个人长久的句子
- 欺诈检测中的代价敏感算法
- 等一个男生长大真的很难 等一个男生长大难吗
- 在Windows中管理无线网络的8个CMD命令
- 别等到你女儿在婆家受尽了委屈 在婆家觉得委屈的句子
- 常用架构模式