【发布时间】:2016-03-31 19:30:49
【问题描述】:
我只是想知道是否可以在可移植的 C 或 C++ 中使用内存映射文件。我认为不是因为据我所知没有标准承认内存映射文件的存在。
使用内存映射可以在两个地址有相同的字节。另外,我认为如果不先在那里构造一个对象,甚至无法使用一块内存(通过char* 除外)。因此,如果我们想将现有的映射文件视为应该是未定义行为的整数数组。
那么内存映射文件和标准的情况如何?
【问题讨论】:
-
不,标准 AFAIK 中没有关于 内存映射文件 的概念。
-
在 C++14 标准中搜索 memory mapped 得到 0 个结果。
-
你可以将
malloc()分配的内存作为你想要的任何类型的数组使用(前提是分配足够大),见C11标准草案n1570,6.5表达式6有效类型。你没有理由不能对mmap()分配的内存做同样的事情。 -
POSIX.1-2008 确实如此。因为它是管理许多操作系统接口(目录、文件等)和大多数当前操作系统(几乎所有操作系统,当然除了 Windows 的标准——尽管甚至微软刚刚宣布与 Canonical 合作提供某种支持—— - 因此,尽管它不是 C 标准,但它是在C 中管理此类OS 级接口的最可移植的标准(确切地说是IEEE Std 1003.1)。
标签: c++ c language-lawyer memory-mapped-files