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

boo*_*ife 4 c c++ memory-mapped-files language-lawyer

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

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

那么关于内存映射文件和标准的情况如何呢?

edm*_*dmz 6

他们不.内存映射通常由操作系统提供:C和C++也可以在没有操作系统的情况下运行.在语言所针对的平台范围上强加这种可用性将是非常有限的.

在独立环境中也可能根本不支持文件,更不用说内存映射的文件了.


Ric*_*ges 5

我只是想知道是否有可能在可移植 C 或 C++ 中使用内存映射文件。

是的(在 C++ 中),请参阅 boost.interprocess 库http://www.boost.org/doc/libs/1_60_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file

我认为不是因为据我所知,没有标准可以识别内存映射文件的存在。

不,它不在标准中,它在 boost 库中,它几乎是可移植的。

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

请参阅上面的文档。您会发现 c++ 对象直接映射到共享内存中,但通过从映射内存区域开头的特殊“偏移”指针进行寻址。

那么关于内存映射文件和标准的情况如何呢?

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