在虚拟 ramdisk 中创建 mmap

Posted

技术标签:

【中文标题】在虚拟 ramdisk 中创建 mmap【英文标题】:Create mmap within virtual ramdisk 【发布时间】:2016-11-21 19:08:13 【问题描述】:

如何使用 mmap 在虚拟 ramdisk 中保留内存?假设我愿意:

mkdir /mnt/ramdisk
mount -t tmpfs -o size=10m tmpfs /mnt/ramdisk

我现在有一个虚拟 ramdisk,但如何在我的 C 程序中映射到它?

int main() 
    // ....
    addr = mmap(/* ramdisk address? */, size, PROT_READ_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);

【问题讨论】:

如果您使用的是 RAMdisk,那么使用 mmap 只会调用开销。为什么不使用fopen @Dai 我正在使用 mmap 作为为我的库保留内存区域的一种方式,但我不确定如果我想在其中保留这个内存,我将如何去做这样的事情一个 ramdisk 而不是为 mmap 提供 NULL 的值作为地址提示 【参考方案1】:

/mnt/ramdisk 是一个 tmpfs 这一事实与您如何使用它没有任何关系。

如果您想在该设备上对文件进行内存映射,您需要 open() 一个文件并将其映射到 MAP_FILE(而不是 MAP_ANONYMOUS),就像它是一个普通文件一样。不要传递地址;将为您选择一个合适的。

【讨论】:

但是我可以使用那个 ramdisk 来直接访问内存吗?我不能简单地在 /mnt/ramdisk 这样的目录上调用 open() 没有。语义不会因为它是 tmpfs 而改变——它的行为与任何其他文件系统完全一样。

以上是关于在虚拟 ramdisk 中创建 mmap的主要内容,如果未能解决你的问题,请参考以下文章

关于 Ramdisk 镜像的问题

如何在linux中创建虚拟环境

如何在linux中创建虚拟环境

如何在linux中创建虚拟环境

在 PyCharm 中创建虚拟环境失败

在虚拟主机中创建别名目录