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

C++使用三种(在C++11中是四种)不同的方案来存储数据,这些方案的区别就在于数据保留在内存中的时间。

  • 自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。C++有两种存储持续性为自动的变量。
  • 静态存储持续性:在函数定义外定义的变量和使用关键字static 定义的变量的存储持续性都为静态。它们在程序整个运行过程中都存在。C++有3种存储持续性为静态的变量。
  • 线程存储持续性(C++11): 当前,多核处理器很常见,这些CPU可同时处理多个执行任务。这让程序能够将计算放在可并行处理的不同线程中。如果变量是使用关键字thread_ local 声明的,则其生命周期与所属的线程一样长。本书不探讨并行编程。
  • 动态存储持续性:用new运算符分配的内存将一直存在, 直到使用delete运算符将其释放或程序结束为止。这种内存的存储持续性为动态,有时被称为自由存储(free store)或堆(heap)。

2.1 作用域和链接

待补充 322

2.3 静态持续变量



静态变量的初始化

除默认的零初始化外,还可对静态变量进行常量表达式初始化和动态初始化。零初始化意味着将变量设置为零,对于标量类型,零将被强制转换为合适的类型。例如,在C++代码中,空指针用0表示,但内部可能采用非零表示,因此指针变量将被初始化相应的内部表示。结构成员被零初始化,且填充位都被设置为零。

零初始化和常量表达式初始化被统称为静态初始化,这意味着在编译器处理文件(翻译单元)时初始化变量。动态初始化意味着变量将在编译后初始化。

那么初始化形式由什么因素决定呢?首先,所有静态变量都被零初始化,而不管程序员是否显式地初始化了它。接下来,如果使用常量表达式初始化了变量,且编译器仅根据文件内容(包括被包含的头文件)就可计算表达式,编译器将执行常量表达式初始化。必要时,编译器将执行简单计算。如果没有足够的信息,变量将被动态初始化。观看如下代码:

#include<cmath>int x;                              //零初始化
int y=15;                          //常量表达式初始化
long z=13*13;                      //常量表达式初始化
const double pi = 4.0*atan(1.0);   //动态初始化

9 内存模型和名称空间相关推荐

  1. 2020 我的C++的学习之路 第九章 内存模型与名称空间

    以C++ Primer Plus为参考书籍,自身归纳知识点,加深记忆. 内存模型与名称空间 存储持续性 作用域与链接 自动存储持续性 静态持续变量 静态持续性.外部链接性 静态持续性.内部链接性 静态 ...

  2. 《C++ Primer Plus》读书笔记之七—内存模型和名称空间

    第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...

  3. C++ Primer Plus学习(九)——内存模型和名称空间

    内存模型和名称空间 单独编译 存储持续性.作用域和链接性 名称空间 单独编译 程序一般可以分为三部分: 头文件:包含结构声明和使用这些结构的函数的原型: 源代码文件:包含与结构有关的函数的代码: 源代 ...

  4. 【C++ Primer Plus】第9章 内存模型和名称空间

    9.1 多文件程序 一个文件(头文件)包含了用户定义类型的定义:另一个文件包含操纵用户定义类型的函数的代码.这两个文件组成了一个软件包,可用于各种程序中. 头文件中常包含的内容: 函数原型. 使用#d ...

  5. static在内存层面的作用_「C++ Primer plus 心得」9.内存模型和名称空间

    本章内容包括: 单独编译 存储持续性.作用域和链接性 定位new运算符 名称空间 C++ 为在内存中存储数据方面提供了多种选择.可以厅数据保留在内存中的时间长度(存储持续性)以及程序的哪一部分可以访问 ...

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

    待定 本章内容:  单独编译  存储持续性.作用域和链接性  定位(placement)new运算符  名称空间 9.1 单独编译 9.2 存储持续性.作用域和链接性 9.2.4 静态持续性. ...

  7. C++(学习笔记)内存模型和名称空间

    文章目录 前言 一.单独编译 二.存储持续性.作用域.链接性 1.作用域和链接 2.静态持续变量 3.静态持续性.外部链接性 4.静态持续性.内部链接性 5.静态持续性.无链接性 6.const全局变 ...

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

    9.5复习题 //1 homer将自动成为自动变量 在一个文件中将secret定义为外部变量,并在第二个文件中使用extern声明它 在外部定义前加上关键字static,将topsecret定义为一个 ...

  9. 【C++】C++PrimerPlus(第6版)中文版 第9章 内存模型和名称空间 编程练习 参考答案

    自己编写的参考答案,在VS2019中都可以编译通过,不是标准答案,也不是最优答案,仅供参考 1.下面是一个头文件 //golf.h – for pr9-1.cpp const int Len = 40 ...

  10. 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)

    0618 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-14 友元 友 ...

最新文章

  1. Codeforces 854 C Planning 贪心 最大堆
  2. db设计专用excel_注塑模具设计与加工解决方案
  3. 多线程编程-条件变量
  4. 小白学JAVA,与你们感同身受,JAVA---day6:抽象类接口的理解。鲁迅的一句话:总之岁月漫长,然而值得等待。
  5. c if 判断select已经选择的值_「Linux」——select和epoll详解
  6. WPF——创建可观察的枚举器
  7. JQ 1.9 API在线资源
  8. 基于华为云IoT设计的智能门锁
  9. python判断键盘输入_python实时检测键盘输入函数的示例
  10. Java:QQ登录页面的制作(实现成功登录的代码)——含源码
  11. IMU标定——椭球拟合
  12. 做虚拟化的服务器网卡用什么,VMware ESX两种虚拟网卡性能对比测试
  13. 比尔盖茨的十条“金玉良言”
  14. python怎么统计单词总数_python统计单词
  15. Talib.MAVP中的periods参数意义
  16. 以前收入高,但毫无上进心,40岁一身房贷,被裁后找个小公司,天天担心试用期过不了,焦虑地睡不着!...
  17. 记录一下nginx代理引起的ip失真问题
  18. 在CentOS上安装和配置OpenNebula入门实例
  19. 函数式编程——python为例
  20. 基于embedded.mobileprovision描述文件查看iOS苹果证书到期时间三种方案

热门文章

  1. windows下设置tomcat自动启动的注意事项
  2. 编写代码模拟三次密码输入的场景。
  3. c语言switch语句可以用在数组上吗,Microchip工程师社区 - C语言switch语句不能给数组吗? - Microchip C语言编译器论坛 - 麦田论坛...
  4. Flink+Hudi 构架湖仓一体化解决方案
  5. Android通过AIDL与远程服务通信
  6. 淘宝开源的代码质量检测工具,太强大了!!
  7. 疫情之下,计算机仿真程序告诉你,没事别乱出门!企业复工务必做到八个“一”...
  8. Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
  9. Jupyter notebook文件默认存储路径以及更改方法
  10. js使用html5,JS使用H5实现图片预览功能