6.2.4 对象的存储持久性

1、一个对象具有一个存储持久性来确定其生命周期。一共有四种存储持久性:静态的,线程的,自动的,以及分配的。分配存储在7.22.3中描述。

2、一个对象的生命周期是程序执行的一部分,在此期间该存储空间确保能为该对象进行保留。一个对象存在就有一个常量地址[注:常量地址意思是在可能不同时刻所构建的两个指针指向同一个对象,这两个指针的值是相等的。在同一个程序的两个不同执行期间,地址可能不同。也就是说,对于一个可执行程序,第一次运行获得的一个对象地址与第二次执行获得该对象的地址可能是不同的。],并保存其最后所存储的值,贯穿其生命周期。如果一个对象在其生命周期以外的地方被引用,那么行为是未定义的。当一个指针所指向的对象到达了其生命周期的末尾,那么该指针的值就变为不确定了。

3、其标识符没有被声明为存储类指示符_Thread_local的一个对象,并且具有外部或内部连接,或具有存储类指示符static,具有静态存储持久性。其生命周期为程序的整个执行并且其所存储的值在程序启动前(即进入main函数前)仅被初始化一次。

4、其标识符以存储类指示符_Thread_local所声明的一个对象具有线程存储持久性。其生命周期是创建该对象的线程的整个执行,并且它的值在线程启动时被初始化。每个线程都有这样一个独立的对象,并且在一个表达式中对所声明名字的使用引用的是计算该表达式的线程相关联的那个对象。企图间接从另一个线程来访问某个线程中的线程存储持久性的对象是实现定义的。

5、其标识符以不具有连接并且没有存储类指示符static所声明的一个对象具有自动存储持久性,包括某些复合字面量。企图间接从另一个线程而不是与该对象相关联的线程访问具有自动存储持久性的一个对象是由实现定义的。

6、对于诸如不具有一个可变长度数组类型的一个对象,其生命周期从它相关联的语句块的入口延展到该语句块的结束(以任意方式退出该语句块)。(进入另一个封闭的语句块或调用一个函数会延迟,但不会结束对当前语句块的执行。)如果语句块被递归进入,那么该对象的一个新实例每次都会被创建。该对象的初始值是不确定的。如果为该对象指定一次初始化,那么在每次对它的声明或复合字面量到达语句块的执行中时,初始化被执行;否则,该值在每次到达声明时变为不确定的。

7、对于一个不具有可变长度数组类型的变量,其生命周期从该对象的声明一直到程序的执行离开声明的作用域。[注:离开包含声明的最里面的语句块,或是跳到那个语句块中的某一点或在声明之前的一个嵌套语句块,即离开该声明的作用域。]如果作用域被递归地进入,那么该对象的一个新的实例每次都会被创建。该对象的初始值是不确定的。

8、一个具有结构体或联合体类型的非左值表达式,这里该结构体或联合体包含了具有数组类型的一个成员(递归包含所有所包含的结构体和联合体的成员)以自动存储持久性和临时生命周期来引用一个对象。[注:当一个数组成员被访问时,这么一个对象的地址被隐式地获取。]当表达式被计算时,其生命周期开始,并且其初始值为该表达式的值。当包含完整表达式或完整声明符结束时,其生命周期周期结束。任何企图修改具有临时声明周期的一个对象都将导致未定义行为。

ISO/IEC 9899:2011 条款6.2.4——对象的存储持久性的更多相关文章

  1. ISO/IEC 9899:2011 条款6.2.8——对象的对齐

    6.2.8 对象的对齐 1.完整的对象类型具有对齐要求,对齐要求是对该类型对象可以在哪个地址进行分配的放置限制.一个对齐是一个实现定义的整数值,表示一个给定对象可以分配在相继两个地址之间跨多少字节的位 ...

  2. ISO/IEC 9899:2011 条款3——术语、定义与符号

    3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...

  3. ISO/IEC 9899:2011 条款5——5.2.1 字符集

    5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...

  4. ISO/IEC 9899:2011 条款6.4.2——标识符

    6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier    identifier-nondigit identifie ...

  5. ISO/IEC 9899:2011 条款6.4.3——通用字符名

    6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...

  6. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

  7. ISO/IEC 9899:2011 条款4——标准顺从

    4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...

  8. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

  9. ISO/IEC 9899:2011 条款6.3——转换

    6.3 转换 1.有些操作符将操作数的值自动地从一种类型转换为另一种.本子条款指定了从这么一个隐式转换所要求的结果,以及从一个投射操作(一个显式转换)所要求的结果.在6.3.1.8中所列出的信息概括了 ...

随机推荐

  1. PL/SQL 使用控制流程

    一.条件分支语句 1.if判断 IF <布尔表达式> THEN PL/SQL 和 SQL语句 END IF; 2.if else判断 IF <布尔表达式> THEN PL/SQ ...

  2. sublime 不是插件安装越多越好,如xxxsnippet 自动完成插件太多,就非常耗电脑性能,经常性的卡着不动

    sublime 不是插件安装越多越好,如xxxsnippet 自动完成插件太多,就非常耗电脑性能,经常性的卡着不动

  3. 简单聊聊TiDB中sql优化的一个规则---左连接消除(Left Out Join Elimination)

    我们看看 TiDB 一段代码的实现 --- 左外连接(Left Out Join)的消除; select 的优化一般是这样的过程: 在逻辑执行计划的优化阶段, 会有很多关系代数的规则, 需要将逻辑执行 ...

  4. js中数组元素的添加和删除

    js中数组元素常用添加方法是直接添加.push方法以及unshift方法 删除方法则是delete.pop.shift 集修改方法为一身的则是splice 1.添加: (1)直接添加通常都是这样 va ...

  5. MySQL-时间日期类型

    一.MySQL中 日期和时间类型 表示时间值的日期和时间类型为 DATETIME.DATE.TIMESTAMP.TIME和YEAR. 每个时间类型有一个有效值范围和一个"零"值,当 ...

  6. bzoj 3999: [TJOI2015]旅游 LCT

    没啥难的,inf 的值设小了调了半天~ code: #include <bits/stdc++.h> #define N 50003 #define lson t[x].ch[0] #de ...

  7. dp * 3

    cf 467 C 从序列中选出 \(k\) 段连续的 \(m\) 个数 最大化总和 \(f_{i, j}\) 表示前 \(i\) 个位置中选出了 \(j\) 段 转移显然 #include <b ...

  8. P1608 路径统计

    题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...

  9. start django project

    1.django-admin startproject helloword 创建项目helloword 2.开始一个app,写一个hello worldpython manage.py startap ...

  10. 搭建自己的博客(十七):添加每日阅读量并使用highcharts通过图表显示

    之前写了单篇博客的阅读量统计,今天添加了博客总阅读量统计,并且使用highcharts图表显示. 1.变化的部分