Mmapはvoid*を返しますが、。は返しませんvolatile void*
。mmapを使用して共有メモリをマップしている場合、別のプロセスがそのメモリに書き込んでいる可能性があります。つまり、同じメモリ位置からの2回の後続の読み取りで、異なる値が生成される可能性があります。では、なぜ揮発性のボイド*を返さないのでしょうか。
私の推測では、共有メモリセグメントに排他的に書き込むプロセスがある場合、存在するものを常に正しく理解しているため、揮発性ポインタを介して共有メモリを調べる必要はありません。冗長な読み取りを防ぐためにコンパイラーが行う最適化は、その足元に値を書き込んだり変更したりするものが他にないため、重要ではありません。それとも他の歴史的な理由がありますか?戻るvolatile void*
のがより安全なデフォルトであり、この最適化が必要な場合は手動でvoid*にキャストできると言いたくなります。
POSIX mmapの説明:http://opengroup.org/onlinepubs/007908775/xsh/mmap.html