相关疑难解决方法(0)

为什么POSIX mmap没有返回volatile*?

Mmap返回void*,但不是a volatile void*.如果我使用mmap来映射共享内存,那么另一个进程可能正在写入该内存,这意味着来自同一内存位置的两个后续读取可能会产生不同的值 - 这是指volatile的确切情况.那么为什么它不会返回一个易变的空隙*?

我最好的猜测是,如果你有一个专门写入共享内存段的进程,它不需要通过volatile指针查看共享内存,因为它总能正确理解存在的内容; 编译器为防止冗余读取所做的任何优化都无关紧要,因为没有其他任何内容可以写入并更改其下的值.还是有其他一些历史原因?我倾向于说返回volatile void*将是一个更安全的默认值,那些想要进行优化的人可以手动转换为void*.

POSIX mmap说明:http://opengroup.org/onlinepubs/007908775/xsh/mmap.html

c posix pointers mmap volatile

10
推荐指数
3
解决办法
2541
查看次数

标签 统计

c ×1

mmap ×1

pointers ×1

posix ×1

volatile ×1