ISO/IEC 9899:2011 条款6.2.4——对象的存储持久性
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——对象的存储持久性的更多相关文章
- ISO/IEC 9899:2011 条款6.2.8——对象的对齐
6.2.8 对象的对齐 1.完整的对象类型具有对齐要求,对齐要求是对该类型对象可以在哪个地址进行分配的放置限制.一个对齐是一个实现定义的整数值,表示一个给定对象可以分配在相继两个地址之间跨多少字节的位 ...
- ISO/IEC 9899:2011 条款3——术语、定义与符号
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...
- ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...
- ISO/IEC 9899:2011 条款6.4.2——标识符
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier identifier-nondigit identifie ...
- ISO/IEC 9899:2011 条款6.4.3——通用字符名
6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...
- ISO/IEC 9899:2011 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
- ISO/IEC 9899:2011 条款4——标准顺从
4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...
- ISO/IEC 9899:2011 条款6——语言
6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...
- ISO/IEC 9899:2011 条款6.3——转换
6.3 转换 1.有些操作符将操作数的值自动地从一种类型转换为另一种.本子条款指定了从这么一个隐式转换所要求的结果,以及从一个投射操作(一个显式转换)所要求的结果.在6.3.1.8中所列出的信息概括了 ...
随机推荐
- OAuth2在微服务架构中的应用
首先是为什么要在微服务场景使用OAuth2,这是因为使用了OAuth2后,就能向第三方系统提供授权. 其次是如何使用,见下图: 在微服务架构中使用OAuth2,有几个问题需要我们思考: 1. toke ...
- ubuntu---记录.动态库默认路径的踩坑
发现这个问题,还是经过一个报错问题卡了好多天,然后请求好多人的支援,最后个人的疑问:为什么明明指明了路径,生成 .SO 没有问题,在调用.SO 就有问题,报错各种找不到函数或者未定义,然后把缺的 *. ...
- 开源框架---tensorflow c++ API中./configure步骤细节
u@u160406:~/tf1.13/tensorflow$ git checkout r1.13 分支 r1.13 设置为跟踪来自 origin 的远程分支 r1.13.切换到一个新分支 'r1.1 ...
- MLP多层感知机
@author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 转载:http://blog.csdn.net ...
- MySQL Navicat Premium 保存sql语句
一.新建查询 二.编写sql语句并保存 1.保存到内部 1.Ctrl+s保存当前查询文件 2.下次打开可点击查询点击上次保存的查询文件名打开上次查询的文件 2.保存到外部 1.默认保存至 C:\Use ...
- ubuntu下新立得(synaptic)软件包管理器安装
1.从ubuntu下的软件中心(面板主页中输入soft即可找到)搜索安装synaptic后,打开新立得一闪就自动关了.解决办法为: 1.1命令行下卸载,命令行下重新安装: 卸载: #purge表示卸载 ...
- docker-compose.yml的使用
docker-compose.yml包含version.services.networks3大部分 services的书写规则 1.iamge services: web: # 服务名称,用户自定义 ...
- 25 | MySQL是怎么保证高可用的?
在上一篇文章中,我和你介绍了binlog的基本内容,在一个主备关系中,每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能 ...
- js的模块化之路
在ES6之前,官方没有出来import export这种模块化的语法. 为了提高代码复用.避免污染全局,民间写了很多模块化的实现: 1. 立即执行函数 (function(globalVariable ...
- codeforces193B
CF193B Xor sol:发现好像非常不可做的样子,发现n,u都很小,大胆dfs,因为异或偶数次毫无卵用,只要判每次是否做2操作就是了,复杂度O(可过) #include <bits/std ...