C++ Primer Plus 第九章 内存模型和名称空间

内存模型和名称空

单独编译


C++允许甚至鼓励程序员将组建函数放在独立的文件中。可以单独编译这些文件,然后将它们链接称可执行的程序。
如果修改了一个文件,可以只重新编译该文件,然后将它与其他文件的编译版本链接。(文件在C++标准中可以解释为翻译单元(translation unit))

可以将原本的程序分成三个部分:

  • 头文件:包含结构声明和使用这些结构的函数的原形。
  • 源代码文件:包含与结构有关的函数的代码。
  • 源代码文件:包含调用与结构相关的函数的代码。

可以放在头文件里面的东西:

  • 结构声明
  • 模板声明
  • 被声明为const的数据和内联函数

在使用include调用头文件时,使用双引号而非尖括号。

编译两个源代码的UNIX命令:

CC file1.cpp file2.cpp

使用#ifndef _ #endif 可以避免编译报错(多个结构定义)

#ifndef COORDIN_H_
#define COORDIN_H_
...
#endif

编译器在首次遇到COORDIN_H_时,该名称并没有被定义,所以会执行#ifndef和#endif之间的内容,此时会将结构和该名称定义,在之后的编译过程中,如果再遇到该头文件,则会跳过该段内容

存储持续性、作用域和链接性

四种变量:

  • 自动存储持续性。
  • 静态存储持续性。函数外部或者使用关键字static
  • 线程存储持续性(C++11)。多线程
  • 动态存储持续性。new

作用域和链接

  • 作用域(scope)描述了名称在文件(翻译单元)的多大范围内可见。
  • 链接性(linkage)描述了名称如何在不同单元间共享。

链接性为外部的名称可以在文件间共享,链接性为内部的名称只能由一个文件中的函数共享。

自动存储持续性

默认情况,函数中声明的函数参数和变量的存储持续性也是自动的,作用域为局部,没有链接性。

如果在一个块中定义块外相同名称的变量,那么块外的变量在块内会被隐藏(hide).

自动变量和栈

C++程序内存对自动变量管理的内存类似于数据结构中的栈-252

寄存器变量:register

register int count_fast;

在C++11中,该关键字失去了它本身的含义,只是表示变量是自动的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值