是否有任何C或C ++标准识别内存映射文件的存在?

时间:2016-03-31 19:30:50

标签: c++ c language-lawyer memory-mapped-files

我只是想知道是否可以在便携式C或C ++中使用内存映射文件。我想不是因为据我所知,没有标准可以识别存储器映射文件的存在。

使用内存映射可以在两个地址上使用相同的字节。另外,我认为如果不先在那里构建一个对象就不可能使用一块内存(除了通过char*)。因此,如果我们想将现有的映射文件视为应该是未定义行为的整数数组。

关于内存映射文件和标准的情况是什么?

2 个答案:

答案 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 ++对象直接映射到共享内存中,但是通过映射内存区域开头的特殊“偏移”指针进行寻址。

  

那么关于内存映射文件和标准的情况是什么?

没有任何情况。它们不是标准内存模型的一部分。