2016-11-21 71 views
0

如何使用mmap在虚拟ramdisk中保留内存?可以说我这样做:在虚拟ramdisk中创建mmap

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); 
+0

如果你使用的是RAMdisk,那么使用'mmap'只会调用开销。为什么不使用'fopen'? – Dai

+0

@Dai我正在使用mmap作为为我的库保留内存区域的一种方式,但是我不确定如果我想在一个ramdisk中保留这个内存而不是提供mmap地址提示“NULL”的值 –

回答

0

/mnt/ramdisk是一个tmpfs这一事实,对您的使用方式没有任何影响。

如果你想要内存映射该设备上的文件,你会open()一个文件,并MAP_FILE(不MAP_ANONYMOUS),就好像它是一个正常的文件映射。不要传递地址;一个适当的将被选择为你。

+0

但是,我可以使用该ramdisk进行直接内存访问吗?我不能简单地在像'/ mnt/ramdisk'这样的目录上调用open()。 –

+1

不是。语义不会因为它是tmpfs而改变 - 它的行为与任何其他文件系统完全相同。 – duskwuff