【问题标题】:Create mmap within virtual ramdisk在虚拟 ramdisk 中创建 mmap
【发布时间】: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 的值作为地址提示

标签: c linux ramdisk


【解决方案1】:

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

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

【讨论】:

  • 但是我可以使用那个 ramdisk 来直接访问内存吗?我不能简单地在 /mnt/ramdisk 这样的目录上调用 open()
  • 没有。语义不会因为它是 tmpfs 而改变——它的行为与任何其他文件系统完全一样。
猜你喜欢
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2017-04-23
  • 2012-01-06
  • 2015-08-22
  • 2016-05-11
  • 2019-06-12
  • 1970-01-01
相关资源
最近更新 更多