【c语言】C语言:存储类、链接、内存管理
文章图片
存储类
C语言中存储类定义变量(或函数)的范围和生存周期 , 放在类型的前面 。 存储类关键字:auto、register、static、extern 。
auto关键字:表示变量为自动存储类别 , 只能修饰局部变量 , 只有局部作用域 , 运行时候自动创建 , 运行完成自动销毁 , 所有未指明的局部变量都是此类型 。
register关键字:用于定义存储在寄存器中的局部变量 , 而不是存储在内存中 , 所以无法获得寄存器变量的地址(‘&’) 。 既然是寄存器中那意味着变量的类型是有限的 , 比如有可能你所使用的处理器没有足够大的寄存器存储一个double类型的变量 。 另外需要注意的是 , 这对于编译器来说只是一个请求 , 而不是一条命令 , 编译器会在可用寄存器的个数和可用高速内存的数量之间选择 , 所以并不一定是按照你编写的分配 。
static关键字:使得变量在程序运行期间一直存在 , 并且保留值 。 修饰全局变量时 , 那就只有同一个文件(.c文件)可以调用 , 修饰局部变量 , 只有局部可以使用 。
extern关键字:这只是提供一个全局变量的声明 , 也许在其他地方定义 , 对所有文件都是可见的 。
存储类源码
存储类运行结果
另外需要注意的是 , 在使用typedef的时候 , 是不能够和存储类关键字一起的 , 不然编译的时候有种捅马蜂窝的感觉 。 不可以在一个声明中使用多个存储类关键字 。
链接
在C语言程序中一个变量具有:外部链接、内部链接、空连接(这地方针对的是C语言) 。
外部链接:外部链接的变量可以在多个文件中使用;
内部链接:内部链接的变量只能够在一个文件中使用;
空连接:由定义变量所在的代码块私有;
C语言变量链接
内存管理
首先根据存储类区分变量:
1、局部变量:auto修饰的 , 只有局部作用域 , 只在运行期间存在 , 运行开始分配内存 , 运行完成收回内存 , 在栈分配 。
2、静态局部变量:static修饰的局部变量 , 只有局部作用域 , 只被初始化一次 , 整个程序运行一直存在 , 属于静态存储分配空间 。
3、全局变量:全局(文件)作用域(其他文件使用extern再次声明访问) , 程序运行一直存在 , 属于静态存储分配空间 。
4、静态全局变量:static修饰的全局变量 , 文件作用域 , 程序运行一直存在 , 由静态存储空间分配 。
【【c语言】C语言:存储类、链接、内存管理】5、动态分配内存:malloc分配 , free释放 , 不是由固定的规则控制内存持续时间 , 而是由程序员申请和释放 , 可以在一个函数中申请 , 另外一个函数中释放 。 属于堆中分配 。
推荐阅读
- 航拍网|种语言翻译,日商推广播无人机支援29
- 课工场郑州翔天信鸽|JavaScript最常用,java是主流,JetBrains公布编程语言排名
- 鲍跃忠新零售工作室|数据的价值在于链接
- 科技俱乐部|Watch 2曝光:物理旋转表圈回归 8GB存储+330mAh电池,Galaxy
- 「编程」后台编程语言互相争执,为何前端公认JavaScript?
- 驱动之家|没办法啊!,华为:数据存储芯片、算法都是自己做
- 辣妹盘点酱|SA:2020Q1全球智能手机存储芯片市场总收益为94亿美元
- 烟草味道|闪存仅4年打破美韩垄断,再投1700亿!中国存储器基地二期开建
- 中国科技先生|华为逆势猛增剑指全球第一,奇迹!美国三大存储巨头收入大幅下滑
- 科技数码秀|光威弈Pro长江存储原厂颗粒测评,国产SSD崛起之路