c++ - 写入内存是一种可观察的行为吗?

标签 c++ c++11

我查看了标准,但找不到任何迹象表明简单地写入内存会被视为可观察到的行为。如果不是,那将意味着编译后的代码不需要实际写入该内存。如果编译器选择优化此类访问,则涉及映射器内存或共享内存的任何内容都可能不起作用。

1.9-8 似乎定义了一个非常有限的可观察行为,但表明实现可以定义更多。可以假设任何质量编译器都会将修改内存视为一种可观察的行为吗?也就是说,它可能不保证原子性或顺序,但保证数据最终会被写入。

那么,我是否忽略了标准中的某些内容,或者写入内存仅仅是编译器决定做的事情?

来自当前或 C++0x 标准的语句很好。请注意,我不是在谈论通过函数访问内存,而是直接访问,例如将数据写入指针(可能通过 mmap 或其他库函数检索)。

最佳答案

这种东西就是 volatile 存在的目的。否则,写入内存并且从不明显读取它是不可观察的行为。但是,在一般情况下,优化器几乎不可能证明您从不回读它,除非在相对琐碎的示例中,所以这通常不是问题。

关于c++ - 写入内存是一种可观察的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6893116/

相关文章:

c++ - 在 C++ 中传递 C 字符串的问题

c++ - 如何在 Windows 服务应用程序中启动系统时运行代码?

c++ - 如何使用x11窗口背景加载bmp文件

C++11 运算符""带双参数

c++ - 使用 volatile bool 强制另一个线程等待是否安全? (C++)

c++ - 启动应用程序,在 C++ 中捕获标准输出和标准错误

c++ - 删除模板函数中的常量

c++ - 用什么代替 std::map::emplace?

c++ - std::array 作为类的模板参数

c++ - 如果 unique_lock 管理的互斥量被销毁怎么办?