我只是想知道是否可以在便携式C或C ++中使用内存映射文件。我想不是因为据我所知,没有标准可以识别存储器映射文件的存在。
使用内存映射可以在两个地址上使用相同的字节。另外,我认为如果不先在那里构建一个对象就不可能使用一块内存(除了通过char*
)。因此,如果我们想将现有的映射文件视为应该是未定义行为的整数数组。
关于内存映射文件和标准的情况是什么?
答案 0 :(得分:6)
他们没有。内存映射通常由操作系统提供:C和C ++也可以在没有操作系统的情况下运行。在语言定位的平台范围内强加这种可用性将是非常有限的。
在独立环境中也可能根本不支持文件,更不用说内存映射的文件了。
答案 1 :(得分:4)
我只是想知道是否可以在便携式C或C ++中使用内存映射文件。
是的(在c ++中),请参阅boost.interprocess库http://www.boost.org/doc/libs/1_60_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file
我认为不是因为据我所知,没有标准可以识别存储器映射文件的存在。
不,它不在标准中,它在升级库中,几乎是可移植的。
使用内存映射可以在两个地址上使用相同的字节。此外,我认为甚至不使用一块内存而不在那里构建一个对象(除了通过char *)。因此,如果我们想将现有的映射文件视为应该是未定义行为的整数数组。
请参阅上面的文档。您会发现c ++对象直接映射到共享内存中,但是通过映射内存区域开头的特殊“偏移”指针进行寻址。
那么关于内存映射文件和标准的情况是什么?
没有任何情况。它们不是标准内存模型的一部分。