LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1190|回复: 6

Unix/Linux怎么预留虚拟地址,但不分配内存?

[复制链接]
发表于 2006-3-23 13:02:01 | 显示全部楼层 |阅读模式
Unix/Linux怎么预留虚拟地址,但不分配内存?
Window下使用VirtualAlloc可以申请虚拟空间,但不分配内存页。
在Linux下用什么函数实现?谢谢。
我想使用文件映射,映射到同一个地址上。
谢谢!
发表于 2006-3-23 13:06:20 | 显示全部楼层
new定位内存?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-23 13:29:00 | 显示全部楼层
mmap函数的第一个参数是内存地址,我想申请一个内存地址,但不需要希望为它分配内存。
回复 支持 反对

使用道具 举报

发表于 2006-3-24 14:11:19 | 显示全部楼层
没有地址,你怎么用那块内存呢?

btw: mmap的第一个参数是可以为0的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-24 18:35:50 | 显示全部楼层
我只是想多个文件映射到同一个地址上,Windows下是可以这样做的。
get_vm_area,有这个功能,但是内核级别的。
回复 支持 反对

使用道具 举报

发表于 2006-3-26 11:43:39 | 显示全部楼层
好像是先创建一个文件
fd=open(...........);
然后再用mmap把它映射到内存
ptr=mmap(NULL, len , PROT_READ|PROT_WRITE, MAP_SHARED , fd , 0);
另一个程序只要mmap相同的文件,实际就是在操纵相同的内存……
回复 支持 反对

使用道具 举报

发表于 2006-3-27 00:42:28 | 显示全部楼层
Post by littlestar
我只是想多个文件映射到同一个地址上,Windows下是可以这样做的。

你为什么要这么做? 希望将同一些内容同时写到那些文件?
据我所知,linux是做不到的

get_vm_area,有这个功能,但是内核级别的。


  1.     255 /**
  2.     256  *  get_vm_area  -  reserve a contingous kernel virtual area
  3.     257  *
  4.     258  *  @size:      size of the area
  5.     259  *  @flags:     %VM_IOREMAP for I/O mappings or VM_ALLOC
  6.     260  *
  7.     261  *  Search an area of @size in the kernel virtual mapping area,
  8.     262  *  and reserved it for out purposes.  Returns the area descriptor
  9.     263  *  on success or %NULL on failure.
  10.     264  */
  11.     265 struct vm_struct *get_vm_area(unsigned long size, unsigned long flags)
  12.     266 {
  13.     267     return __get_vm_area(size, flags, VMALLOC_START, VMALLOC_END);
  14.     268 }
复制代码

似乎跟你说的不大一样
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表