我已经看过标准但是没有找到任何迹象表明只是写入内存会被视为可观察的行为.如果不是,那就意味着编译的代码不需要实际写入该内存.如果编译器选择优化此类访问,则涉及映射器内存或共享内存的任何内容都可能无效.
1.9-8似乎定义了非常有限的可观察行为,但表明实现可能定义更多.可以假设任何质量编译器都会将修改内存视为可观察行为吗?也就是说,它可能无法保证原子性或排序,但确保最终会写入数据.
那么,我是否忽略了标准中的某些内容,或者只是编译器决定要写入内存?
来自当前或C++ 0x标准的语句是好的.请注意我不是在谈论通过函数访问内存,我的意思是直接访问,例如将数据写入指针(可能通过mmap或其他库函数检索).
这种事情是volatile存在的.另外,写入记忆并且从不显然从中读取是不可观察的行为.但是,在一般情况下,优化器很难证明你从来没有读过它,除非是相对简单的例子,所以它通常不是问题.