Mmap 返回 void*,但不返回volatile void*
. 如果我使用 mmap 来映射共享内存,那么另一个进程可能正在写入该内存,这意味着从同一内存位置进行的两次后续读取可能会产生不同的值—— volatile 的确切情况。那么为什么它不返回一个 volatile void* 呢?
我最好的猜测是,如果您有一个专门写入共享内存段的进程,它不需要通过易失性指针查看共享内存,因为它总是对当前存在的内容有正确的理解;编译器为防止冗余读取所做的任何优化都无关紧要,因为没有其他东西可以写入和更改其脚下的值。还是有其他历史原因?我倾向于说返回volatile void*
将是一个更安全的默认值,那些想要这种优化的人可以手动转换为 void*。
POSIX mmap 说明: http: //opengroup.org/onlinepubs/007908775/xsh/mmap.html