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. C++——流类库和输入/输出

    前言 数据是怎么写道磁盘的? 代码里面我们一个读写调用似乎就能将数据从磁盘读写.仿佛代码是直接和磁盘打交道.以我们最常见的笔记本.或台式机的磁盘SATA盘为例,其受南桥上ATA控制器支配,这里面传输的 ...

  2. IAR建立stm32工程

    stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: 1.在常用 ...

  3. Bootstrap学习地址

    第一步:https://www.runoob.com/bootstrap/bootstrap-tutorial.html  //菜鸟教程 第二步:https://v3.bootcss.com/gett ...

  4. Nginx的平滑升级记录---适用于编译安装的Nginx

    一.查看自己的Nginx的版本号 [root@localhost sbin]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# ls nginx [r ...

  5. Nginx服务rewrite模块功能说明 网站自动跳转功能

    实现域名地址信息跳转,用于做伪静态地址 www.impkk.com/oldboy?edu.html 动态地址 www.impkk.com/oldboy-edu.html 伪静态地址 rewrite ^ ...

  6. java项目中注解使用——整理

    文章:@Mapper注解的使用 地址:https://blog.csdn.net/weixin_39666581/article/details/81057385 @Mapper注解的的作用 1:为了 ...

  7. 命令检测站点是否使用CDN加速

    在CMD   输入   nslookup    域名 例如:nslookup www.baidu.com有CDN的示例Server:  cache3-gzAddress:  211.98.4.1Non ...

  8. vue 自定义全局组件

  9. python - pycharm 配置虚拟环境出现的中文命名问题

    说一个困扰我很久的问题,当使用 pycharm 配置新的虚拟环境想要与之前的环境隔离的时候,正常的点击 New Project 创建项目时,不勾选 Inherit global site-packag ...

  10. SpringMVC数据格式化

    SpringMVC数据格式化 1. 使用Formatter格式化数据 Converter可以将一种类型转换成另一种类型,是任意Object之间的类型转换. Formatter则只能进行String与任 ...