内存映射文件(根据规范)在很大程度上依赖于操作系统的实际实现,其中一些未知方面已经在javadoc中解释。但是我有一些额外的问题,不确定应该向谁寻求答案。
假设应用程序A
将文件从位置=0
到大小=10
映射到内存。
我会认为操作系统需要连续的内存块来进行映射吗?还是这取决于具体实现?
现在假设我们有一个应用程序B
,它从位置=0
到大小=11
进行映射。前10个字节是共享的,还是完全不同的映射?这与连续内存的问题有关。
如果我们想要使用映射文件进行IPC,则需要了解数据如何反映在其他应用程序中,所以如果B
写入内存,A
是否能看到这个变化?
然而,根据规范,这取决于操作系统。这使得它在通用IPC方面的使用非常危险,因为它破坏了可移植性,对吗?
此外,假设操作系统支持它,因此B
写入内存,A
看到了更改,如果我们这样做会发生什么:
B.write("something");
A.write("stuff");
A.read();
A
将会读取什么?
或者换句话说:
文件指针是如何管理的?
在并发情况下它是如何工作的?是否存在跨应用程序锁定?