
C/C++存储类别
栈 (Stack): 用于函数调用,局部变量自动分配和释放。 堆 (Heap): 动态分配内存,使用 静态存储区: 包括
发布日期:2021-05-13 22:26:52
浏览次数:22
分类:精选文章
本文共 1396 字,大约阅读时间需要 4 分钟。
C/C++ 中的存储类别
存储类别定义
存储类别在 C/C++ 中是描述内存管理的关键概念,主要涉及三个方面:作用域、链接性和存储期。这些属性共同决定了变量在程序中的行为和内存管理方式。
作用域 (Scope)
作用域描述了变量可访问的范围,C/C++ 中主要有两个作用域:块作用域和文件作用域。
- 块作用域 (Block Scope): 变量只能在声明它的块内访问,包括函数体内的局部变量。
- 文件作用域 (File Scope): 变量可在整个文件范围内访问,除了在文件包含过程中,头文件和源文件被当作一个“翻译单元”处理。
链接性 (Linkage)
链接性决定了变量或函数在多个文件间是否可访问,在 C/C++ 中有三种链接性:
- 外部链接 (External Linkage): 可以在同一或多个文件中使用。
- 内部链接 (Internal Linkage): 只能在文件内使用。
- 无链接 (No Linkage): 只能在块作用域内使用。
存储期 (Storage Duration)
存储期决定了变量在内存中的存在时间:
- 静态存储期 (Static Storage Duration): 变量在程序执行期间一直存在。
- 线程存储期 (Thread Storage Duration): 变量随线程存在。
- 自动存储期 (Automatic Storage Duration): 局部变量,自动分配和释放。
- 动态分配存储期 (Allocated Storage Duration): 使用
malloc
或new
动态分配,手动释放。
存储类别在 C/C++ 中的表示形式
在 C/C++ 中,存储类别由关键字和作用域决定,如 auto
、register
、extern
、static
和 thread_local
。
1、自动存储类别
自动变量属于块作用域,无法外部访问,分配和释放自动处理。可以用 auto
关键字强调,但在 C++ 11之后 auto
用法发生变化。
2、寄存器存储类别
寄存器变量存储在 CPU 寄存器中,访问速度最快。使用 register
关键字声明,编译器可能将其映射到寄存器,但不总是保证。
3、静态存储类别
静态变量具有静态存储期,可在文件作用域或块作用域内使用:
- 静态、外部链接: 全局变量,默认静态。
- 静态、内部链接: 使用
static
声明,全局变量仅在文件中可访问。 - 静态、无链接: 使用
static
声明局部变量,无法外部访问。
C/C++ 的内存管理
在运行时,内存分为栈、堆和静态存储区:
malloc
或 new
,需手动释放。static
和 extern
变量,存储于 компsoeverest),9.9 。链接与符号表
链接器通过符号表管理代码和数据段,记录变量和函数的链接属性。不同链接属性的变量有不同的符号属性,如外部链接和内部链接的全局变量。
链接时,符号表记录变量的位置和属性,链接器根据这些信息组合目标文件。每个变量在符号表中有独特的标识,如名称和值。
总结
存储类别的理解涉及作用域、链接性和存储期,通过关键字控制变量在内存中的存储和访问。理解这些概念有助于更好地管理内存和实现安全的多线程程序。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月22日 02时42分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Flask--简介
2019-03-11
16 python基础-恺撒密码
2019-03-11
Frame--Api框架
2019-03-11
Boostrap技能点整理之【网格系统】
2019-03-11
新闻发布项目——业务逻辑层(UserService)
2019-03-11
hibernate正向生成数据库表以及配置——hibernate.cfg.xml
2019-03-11
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
2019-03-11
java实现人脸识别源码【含测试效果图】——Dao层(IUserDao)
2019-03-11
使用ueditor实现多图片上传案例——前台数据层(Index.jsp)
2019-03-11
解决Chrome播放视频闪屏黑屏无法播放
2019-03-11
Git简单理解与使用
2019-03-11
echarts 基本图表开发小结
2019-03-11
二分查找.基于有序数组的查找方法.704
2019-03-11
制作JS验证码(简易)
2019-03-11
adb通过USB或wifi连接手机
2019-03-11
泛型机制 Generic
2019-03-11