在虚拟 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的主要内容,如果未能解决你的问题,请参考以下文章