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

如果使用memoryorderacquire[关闭]存储会发生什么

司马念
2023-03-14

编辑问题,以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

我们知道:load with memory_order_acquire,store with memory_order_release但是,我发现用gcc4.8.2,open -O2时,抛出了一个编译错误,/usr/include/c/4 . 8 . 2/atomic:199:9:error:对于' __atomic_store '无效的内存模型,但是如果使用close -O2,错误就消失了

此外,如果使用gcc8.3.0,即使使用-O2也会出现错误

发生了什么事?这怎么解释?

共有1个答案

葛雪松
2023-03-14

如果没有优化,< code>order对于编译器内置的编译时常量是不可见的,GCC只是将运行时变量顺序视为< code>seq_cst(而不是在值上进行分支以跳过< code>mfence)。常量传播需要优化,以使非法的< code>order对检查它的编译器逻辑可见,并给出预期的错误。

< code >标准::原子

没有优化,就不会发生恒定传播。为什么clang使用-O0(对于这个简单的浮点和)生成低效asm?。即使__attribute__((always_inline))在内联时也不会使编译器优化,它只是避免了实际的函数调用。为什么这个C包装器类没有内联?

如果您查看生成的未优化的ASM,甚至有一个对std::运算符的非内联调用

 类似资料:
  • 我正在处理xml,我需要每条记录发送一条消息,当我收到最后一条记录时,我关闭了kafka生产者,这里的问题是kafka生产者的发送方法是异步的,因此,有时当我关闭生产者时,它会拖曳我在某个地方读到过,我可以让制片人敞开心扉。我的问题是:这意味着什么,或者是否有更好的解决方案。 -编辑- 想象以下场景: 我们阅读标签并创建kafka生产者 对于每个元素,我们读取其属性,生成一个json对象并使用se

  • 假设我有一个普通的应用程序,其中我正在使用ApplicationContext ApplicationContext=new FileSystemXmlApplicationContext(“bean.xml”)创建一个Spring应用程序上下文 现在,假设在这个bean.xml有Spring bean的bean定义,所以当我创建应用程序上下文时,Spring容器将为这个实例化和初始化一个对象。

  • 问题内容: 如果我提交的表单的操作字段为空,则它提交到当前页面-ajax请求就是这种情况吗? 问题答案: 没错,它会提交到当前页面。 参考,jQuery文档: url (字符串) 默认值:当前页面 一个字符串,其中包含将请求发送到的URL。 资源

  • 问题内容: 我有三个问题。 为了解释,我正在查看某人的代码,并注意到有时没有关闭。通常,Eclipse会警告您这是潜在的内存泄漏(我已修复)。但是,在Callable内部类中,没有警告。 编写代码的人都是经验丰富的Java开发人员,所以我首先想到的是它是故意的…但是可能是他们在编写代码时只是匆忙而忽略了它。 我的问题是: Eclipse为什么不突出显示这一点(可以通过以下问题的答案来回答)? 如果

  • 问题内容: 假设我创建了一个对象,该对象具有ID,firstName,lastName和email,用于实例变量和相应的setter / getter方法。如何,如果我不重写计算中时,它存储在集合对象的对象? 问题答案: 如果不重写hashcode(),则集合将使用Object类中的默认实现。即使根据equals()方法它们相等,此实现也会为不同的对象提供不同的值。 一些集合(例如HashSet,

  • 问题内容: 我正在使用Rails 4.1,并设置共享Redis ElasticCache节点进行缓存。我尝试了https://github.com/redis- store/redis-store 和https://github.com/sorentwo/readthis,它们看起来很棒。 但是,如果Redis崩溃了怎么办?readthis和redis-store都完全失败。我宁愿网站没有缓存也慢