当前位置: 首页 > 知识库问答 >
问题:

这种易失性访问可以优化掉吗?

江华容
2023-03-14

来自ISO/IEC 9899:201x第5.1.2.3节程序执行:

2访问一个易失性对象,修改一个对象,修改一个文件,或者调用一个做那些操作中任何一个的函数,都是副作用,都是执行环境状态的改变。表达式的计算通常包括值计算和副作用的启动。用于lvalue表达式的值计算包括确定指定对象的标识。

因此,访问(读\写)volatile被称为副作用。让我们继续:

6对符合要求的实施的最低要求是:

>

  • 对易失性对象的访问严格按照抽象机器的规则进行评估。

    在程序终止时,写入文件的所有数据应与按照抽象语义执行程序所产生的结果相同。

    volatile int *timer_reg = REGISTER_ADDRESS_CONST;
    while (*timer_reg  == 0) {/*empty loop*/}
    

    编辑:我的观点是,由于while循环是空的,也许编译器可以认为提取的volatile值是不需要的。

  • 共有1个答案

    岳硕
    2023-03-14

    因此,如果我读取一个volatile(这是一个副作用),而不使用我读取的值,这种访问实际上是不需要的,可以优化掉。

    不,文本上说“它的价值没有被利用,也没有产生必要的副作用”。它没有说“或”。无论您是否使用该值,都存在一个副作用--对volatile变量的访问。

    因此读取访问(无需进一步使用提取的值)可以被优化。

     类似资料:
    • 本文向大家介绍数据库访问性能优化,包括了数据库访问性能优化的使用技巧和注意事项,需要的朋友参考一下 在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进行说明,而对于我们程序员来说这种介绍并不能很好的掌握优化知识,因为很多介绍只是对一些特定的场景优化的,所以反而有时会产生误导或让程序员感觉不明白其中的奥妙而对数据库优化感觉很神秘。 很多程序员总是问如何学习数据库优化,有没有好的教

    • 来自ISO/IEC 9899:201x第5.1.2.3节程序执行第4段: 关于volatile对象,这里允许的优化是什么?有人能给出一个可以优化掉的易失性访问的例子吗? 由于Volatile访问是一种可观察的行为(在第6段中描述),似乎没有任何优化可以针对Volatile进行,所以,我很想知道第4节中允许的优化是什么。

    • C标准允许根据缺陷报告1688(已于2013年9月解决)使用变量: 这种组合是有意允许的,在某些情况下可以用来强制常量初始化。 看起来,其目的是只允许,这在C 20之前是不可用的。 在某些情况下,当前的编译器在处理方面仍然存在分歧。例如,此程序通过另一个变量初始化一个这样的变量: 它在GCC和MSVC中被接受,但Clang抱怨: 在线演示:https://gcc.godbolt.org/z/43e

    • Django的数据库层提供了很多方法来帮助开发者充分的利用他们的数据库。这篇文档收集了相关文档的一些链接,添加了大量提示,并且按照优化数据库使用的步骤的概要来组织。 性能优先 作为通用的编程实践,性能的重要性不用多说。弄清楚你在执行什么查询以及你的开销花在哪里。你也可能想使用外部的项目,像django-debug-toolbar,或者直接监控数据库的工具。 记住你可以优化速度、内存占用,甚至二者一

    • 本文向大家介绍JavaScript对象的属性可以通过几种方式访问​​?,包括了JavaScript对象的属性可以通过几种方式访问​​?的使用技巧和注意事项,需要的朋友参考一下  可以通过两种方式访问对象属性。一个是.property,另一个是[property]。 语法1 语法2 为了更好地理解,让我们看下面的示例。 在下面的示例中,定义了一个名为“ person”的对象,并以点符号访问其属性。

    • 所有的中断函数都能正常工作,但是过程函数却让我很生气。 我会感激任何我没注意的把戏。