首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言:存储类、链接、内存管理

存储类

C语言中存储类定义变量(或函数)的范围和生存周期,放在类型的前面。存储类关键字:auto、register、static、extern。

auto关键字:表示变量为自动存储类别,只能修饰局部变量,只有局部作用域,运行时候自动创建,运行完成自动销毁,所有未指明的局部变量都是此类型。

register关键字:用于定义存储在寄存器中的局部变量,而不是存储在内存中,所以无法获得寄存器变量的地址(‘&’)。既然是寄存器中那意味着变量的类型是有限的,比如有可能你所使用的的处理器没有足够大的寄存器存储一个double类型的变量。另外需要注意的是,这对于编译器来说只是一个请求,而不是一条命令,编译器会在可用寄存器的个数和可用高速内存的数量之间选择,所以并不一定是按照你编写的分配。

static关键字:使得变量在程序运行期间一直存在,并且保留值。修饰全局变量时,那就只有同一个文件(.c文件)可以调用,修饰局部变量,只有局部可以使用。

extern关键字:这只是提供一个全局变量的声明,也许在其他地方定义,对所有文件都是可见的。

存储类源码

存储类运行结果

另外需要注意的是,在使用typedef的时候,是不能够和存储类关键字一起的,不然编译的时候有种捅马蜂窝的感觉。不可以在一个声明中使用多个存储类关键字。

链接

在C语言程序中一个变量具有:外部链接、内部链接、空连接(这地方针对的是C语言)。

外部链接:外部链接的变量可以在多个文件中使用;

内部链接:内部链接的变量只能够在一个文件中使用;

空连接:由定义变量所在的代码块私有;

C语言变量链接

内存管理

首先根据存储类区分变量:

1、局部变量:auto修饰的,只有局部作用域,只在运行期间存在,运行开始分配内存,运行完成收回内存,在栈分配。

2、静态局部变量:static修饰的局部变量,只有局部作用域,只被初始化一次,整个程序运行一直存在,属于静态存储分配空间。

3、全局变量:全局(文件)作用域(其他文件使用extern再次声明访问),程序运行一直存在,属于静态存储分配空间。

4、静态全局变量:static修饰的全局变量,文件作用域,程序运行一直存在,由静态存储空间分配。

5、动态分配内存:malloc分配,free释放,不是由固定的规则控制内存持续时间,而是由程序员申请和释放,可以在一个函数中申请,另外一个函数中释放。属于堆中分配。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200623A0TO3100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券