回 帖 发 新 帖 刷新版面

主题:新人求助,mmap的问题

我现在在做毕业设计,由于导师提供课题时不太仔细。源代码中很多是在unix下的,由于我找不到他们的库,所以在用visual c++6.0时不能编译,所以我想把其中一些转换成C下的函数来编译,但是平时接触的很少,碰到不少困难。
比如下面这段程序,我想把mmap函数用C下的malloc来写,不知道可不可以,应该怎么写呢?
                page_size = getpagesize();
        start_padding = offset % page_size;
        real_offset = (offset / page_size) * page_size;
        real_length = real_offset + start_padding + length;
        real_start = mmap(0, real_length, PROT_READ, MAP_SHARED, fd, real_offset);
大家帮帮我,谢谢!

回复列表 (共1个回复)

沙发

mmap() 是 *nix 下的 system call。是直接影射 virtual address。
你用 malloc() 直接从 heap 中分配,虽然实质上也是使用 virtual address,
但因其实有一套 heap 管理机制。由它来控制 virual address 分配。与最
开始的代码从意义和效率上讲有着本质上的区别。 windows 系统下与 mmap()
等价的是 VirtualAlloc() 等函数。或者你使用 CreateFileMapping()。具体
查看 MSDN。

我来回复

您尚未登录,请登录后再回复。点此登录或注册