C/C++存储类别
发布日期: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): 使用 mallocnew 动态分配,手动释放。

存储类别在 C/C++ 中的表示形式

在 C/C++ 中,存储类别由关键字和作用域决定,如 autoregisterexternstaticthread_local

1、自动存储类别

自动变量属于块作用域,无法外部访问,分配和释放自动处理。可以用 auto 关键字强调,但在 C++ 11之后 auto 用法发生变化。

2、寄存器存储类别

寄存器变量存储在 CPU 寄存器中,访问速度最快。使用 register 关键字声明,编译器可能将其映射到寄存器,但不总是保证。

3、静态存储类别

静态变量具有静态存储期,可在文件作用域或块作用域内使用:

  • 静态、外部链接: 全局变量,默认静态。
  • 静态、内部链接: 使用 static 声明,全局变量仅在文件中可访问。
  • 静态、无链接: 使用 static 声明局部变量,无法外部访问。

C/C++ 的内存管理

在运行时,内存分为栈、堆和静态存储区:

  • 栈 (Stack): 用于函数调用,局部变量自动分配和释放。
  • 堆 (Heap): 动态分配内存,使用 mallocnew,需手动释放。
  • 静态存储区: 包括 staticextern 变量,存储于 компsoeverest),9.9 。
  • 链接与符号表

    链接器通过符号表管理代码和数据段,记录变量和函数的链接属性。不同链接属性的变量有不同的符号属性,如外部链接和内部链接的全局变量。

    链接时,符号表记录变量的位置和属性,链接器根据这些信息组合目标文件。每个变量在符号表中有独特的标识,如名称和值。

    总结

    存储类别的理解涉及作用域、链接性和存储期,通过关键字控制变量在内存中的存储和访问。理解这些概念有助于更好地管理内存和实现安全的多线程程序。

    上一篇:《洞见》罗伯特·赖特
    下一篇:C语言之结构体(一)

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年04月22日 02时42分52秒