C primer plus 学习笔记 第12章 存储类别、链接和内存管理

简介: C primer plus 学习笔记 第12章 存储类别、链接和内存管理

第12章 存储类别、链接和内存管理

 


这一章比较难,C的存储类别很多,而且和链接


 

 

12.1 存储类别

C提供了多种存储类别在内存中存储数据。

12.1.1 作用域

作用域描述程序中可访问标识符的区域。

作用域有:块作用域,函数作用域,函数原型作用域或文件作用域。

块作用域:声明在语句块中的变量,在语句块内可见

函数作用域::声明在函数中的变量,函数体内可见

函数原型作用域:仅仅在函数原型的那个括号()里面可见。

文件作用域: 变量定义在函数的外面,从定义到文件末尾可见

12.1.2 链接

C变量有3种链接属性:外部链接、内部链接和无链接。块作用域、函数作用域和函数原型作用域的变量都是无链接变量。

具有文件作用域的变量可以时外部链接或内部链接,外部链接可在多文件程序中使用,内部链接只能在当前单元使用。

存储类别说明符static可区分内部链接和外部链接:

int a = 6; //外部链接

static int b = 5; //内部链接

12.1.3 存储期

存储期描述了对象的生存期。

C对象有4种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。

静态存储期: 静态存储期的对象在程序执行期间一直存在。文件作用域变量具有静态存储期。

线程存储期:用于并发程序设计,程序执行可分为多个线程。具有线程存储期的对象,从被声明至线程结束期间存在。

以关键字_Thread_local 声明一个对象时,每个线程都获得该变量的私有备份。

自动存储期:块作用域变量通常具有自动存储期。内存自动分配和释放。 块作用域变量在前面加上static可以变长静态存储期。

 

12.1.4 自动变量

默认 块或函数头种的变量都是自动存储类。

可以用auto 显式定义自动变量:auto int plox; //一般不需要,且和C++的auto不同,有歧义。

 

1.没有花括号的块

循环或if语句的一部分,即使没有{},也是一个块。

2.自动变量的初始化

自动变量不会自己初始化。

12.1.5 寄存器变量 (register) //为了加快计算速度把变量存在寄存器中,通常不需要

 

12.1.6 块作用域的静态变量

12.1.7 外部链接的静态变量

12.1.8 内部链接的静态变量

12.1.9 多文件

12.1.10 存储类别说明符12.1.11 存储类别和函数'static double beta(int ,int);

12.1.12存储类别的选择:按需选择,通常自动

 

12.2 随机数函数和静态变量

12.3 掷骰子

相关文章
|
5天前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之 从Kafka读取数据,并与两个仅在任务启动时读取一次的维度表进行内连接(inner join)时,如果没有匹配到的数据会被直接丢弃还是会被存储在内存中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1天前
|
存储 安全 Unix
【内网安全】Win&Linux&内存离线读取&Hashcat破解&RDP&SSH存储提取
【内网安全】Win&Linux&内存离线读取&Hashcat破解&RDP&SSH存储提取
|
6天前
|
存储 小程序 编译器
【C语言基础】:数据在内存中的存储
【C语言基础】:数据在内存中的存储
|
7天前
|
程序员 C++
c++primer plus 6 读书笔记 第十二章 类和动态内存分配
c++primer plus 6 读书笔记 第十二章 类和动态内存分配
|
7天前
|
存储 IDE 编译器
c++primer plus 6 读书笔记 第九章 内存模型和名称空间
c++primer plus 6 读书笔记 第九章 内存模型和名称空间
|
15天前
|
存储 编译器 C语言
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)二
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)二
14 0
|
1月前
|
存储 算法 关系型数据库
实时计算 Flink版产品使用合集之在Flink Stream API中,可以在任务启动时初始化一些静态的参数并将其存储在内存中吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
96 4
|
15天前
|
存储 编译器 C语言
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)一
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)一
21 2
|
1月前
|
存储 弹性计算 监控
【阿里云弹性计算】深入阿里云ECS配置选择:CPU、内存与存储的最优搭配策略
【5月更文挑战第20天】阿里云ECS提供多种实例类型满足不同需求,如通用型、计算型、内存型等。选择CPU时,通用应用可选1-2核,计算密集型应用推荐4核以上。内存选择要考虑应用类型,内存密集型至少4GB起。存储方面,系统盘和数据盘容量依据应用和数据量决定,高性能应用可选SSD或高效云盘。结合业务特点和预算制定配置方案,并通过监控应用性能适时调整,确保资源最优利用。示例代码展示了使用阿里云CLI创建ECS实例的过程。
101 5
|
28天前
|
存储 小程序
数据在内存中的存储
数据在内存中的存储
21 1