Skip to content

Latest commit

 

History

History
40 lines (40 loc) · 3.23 KB

chapter9.md

File metadata and controls

40 lines (40 loc) · 3.23 KB

第9章 内存模型和名称空间

  • 头文件常包含的内容
    • 函数原型
    • 使用 #defineconst定义的符号常量
    • 结构声明
    • 类声明
    • 模板声明
    • 内联函数
  • 头文件查找顺序
    • "coordin.h" C++编译器将首先查找当前的工作目录或源代码目录,如果没有找到,则将在标准位置查找。
    • <coordin.h> C++编译器将在存储标准头文件的主机系统的文件系统中查找。
  • 存储连续性
    • 自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。他们在程序开始执行器所属的函数或代码块时,他们使用的内存被释放。C++有两种存储持续性的变量。
    • 静态存储持续性:在函数外定义的变量和使用关键字static定义的变量的存储持续性都为静态。他们在程序整个运行中都存在。C++有3种存储持续性为静态的变量。
    • 线程存储持续性(C++11): 如果变量是使用关键字thread_local声明的,则其声明周期与所属的线程一样长。
    • 动态存储持续性:用new运算符分配的内存将一直存在,直到使用delete运算符将其释放或程序结束为止。这种内存的存储持续性为动态,有时被称为自由存储(free store)或堆(heap)。
  • 静态持续变量
    • C++为静态存储持续性变量,提供了3种链接性
      • 外部链接性(可在其他文件中访问)
      • 内部链接性(只能在当前文件中访问)
      • 无链接性(只能在当前函数或代码块中访问)
  • 存储说明符
    • auto(在C++11中不再是说明符)
    • register
    • static
    • extern
    • thread_local(C++11新增)
    • mutable,即使结构(或类)变量为const,其某个成员也可以被修改。
  • 语言链接性
  • cv-限定符
    • const,内存被初始化后,程序便不能再对它进行修改。
    • volatile,即使程序代码没有对内存单元进行修改,其值也可能发生变化。该关键字的作为是为了改善编译器的优化能力。
  • 名称空间
    • using 声明使一个名称可用,而using编译指令使所有的名称都可用。
    • using编译指令由名称空间名和它前面的关键字 using namespace组成,它使名称空间的所有名称都可用,而且不需要使用作用域解析运算符。
  • 在默认情况下,C++函数的连接性为外部,因此可以在文件间共享;但使用关键字static限定的函数的链接性为内部的,被限制在定义它的文件中。
  • 静态变量在整个程序执行期间都存在。
  • 对于在函数外面定义的变量,其所属文件中位于该变量的定义后面的所有函数都可以使用它(文件作用域),并可在程序的其他文件中使用(外部链接性)。另一个文件中要使用这种变量,必须使用extern关键字来声明它。
  • 对于文件间共享的变量,应在一个文件中包含起定义声明(无需使用extern,但如果同时进行初始化,也可使用它),并在其他文件中包含引用声明(使用extern且不初始化)。
  • 在代码块中使用关键字static定义的变量被限制在该代码块内(局部作用域、无链接性),但在整个程序执行期间,它都一直存在并且保持原值。