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. web开发常见的鉴权方式

    结合网上找的资料整理了一下,以下是web开发中常见的鉴权方法: 预备:一些基本的知识 RBAC(Role-Based Access Control)基于角色的权限访问控制(参考下面①的连接) l    ...

  2. 基于Java+Selenium的WebUI自动化测试框架(八)-----读取元素(XML文件)

    我们继续回到自动化测试框架的主线上来,在前面的文章中,我们定义一个页面元素的主要参数有:路径,找寻方式,等待时间,名称,这个四个参数.另外,我们还需要考虑一个问题,就是网站的页面. 举个例子来说,如果 ...

  3. SQL进阶17-变量的声明/使用(输出)--全局变量/会话变量--用户变量/局部变量

    /*进阶17 变量 系统变量: 全局变量: 会话变量: 自定义变量: 用户变量: 局部变量: */ /* #一: 系统变量 #说明: 变量由系统提供,不是用户定义的,属于服务器层面 #使用的语法 #1 ...

  4. python练习题(二)

    题目: 已知以下几期双色球号码(最后一个数字为蓝球), 2019080 03 06 08 20 24 32 07 2019079 01 03 06 09 19 31 16 2019078 01 17 ...

  5. mysql官方下载安装教程(centos)

    Linux下Mysql 5.6.30 tar包安装 (2016-04-27 22:45:39) 转载▼ 环境:centos 6.4 x64 先下载mysql安装包 打开 http://dev.mysq ...

  6. Spring源码窥探之:Spring AOP初步

    AOP(Aspect Oriented Programming):即我们常说的面向切面编程. 什么是AOP?AOP是在我们原来写的代码的基础上,进行一定的包装,比如在方法执行前.方法返回后.方法抛出异 ...

  7. Spring Cloud 功能使用的层面组件(一)

    来源:赤峰seo 实际上,Spring Cloud 是一个全家桶式的技术栈,它包含了很多组件.本文先从最核心的几个组件,也就是 Eureka.Ribbon.Feign.Hystrix.Zuul 入手 ...

  8. celery timeout的拦截

    0X01 场景 celery任务超时报错,想查看是传入哪一类数据运行时导致的超时(哪一个插件),但是该报错难以拦截. [2019-06-30 17:23:21,070: ERROR/MainProce ...

  9. 解决appium自带的Chromedriver版本和设备Android System Webview版本不一致的问题

    报错信息 selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred w ...

  10. 56、servlet3.0-与SpringMVC整合分析

    56.servlet3.0-与SpringMVC整合分析 web容器在启动的时候,会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainer ...