LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: future_god

mmap如何为进程增加额外的地址空间?

[复制链接]
 楼主| 发表于 2008-8-13 10:53:36 | 显示全部楼层
3G的虚拟地址空间还不够大吗?况且mmap出来的地址也在3G空间之内,有必要吗?


这个3G是否有出处? 

而且我的内存是32M, FLASH 8M. 离3G太远。(也许这个帖子发这里并不合适。)

我本来的想法是用mmap来增加进程的额外的地址空间。原因是基于下面的一段英文引用。
With a process, the amount of virtual address space is fixed. Since there is only one stack, its size usually isn't a problem. With threads, however, the same amount of virtual address space must be shared by all the thread stacks. You might have to reduce your default thread stack size if your application uses so many threads that the cumulative size of their stacks exceeds the available virtual address space. On the other hand, if your threads call functions that allocate large automatic variables or call functions many stack frames deep, you might need more than the default stack size.


但是看不出来这样对增加内存有何种的好处,用mmap映射一个文件却可以完成IPC的工作,但那就是不是匿名映射的方式了


我这里使用mmap并非用其映射文件来做IPC的功能。


如果在linux用mmap方式增加空间,mmap大袋一个磁盘(flash)中的文件,影射后也占用系统内存空间,当内存不够的时候再换页出去。

这和直接在堆上开辟内存的性能开销是一样的。

堆应该是在里程的空间里的吧,而我是要增加进程的地址空间。

附件中的内存分布与现在程序的内存分布应该并没有太大变化吧?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-13 10:56:30 | 显示全部楼层
况且mmap出来的地址也在3G空间之内,有必要吗?
在3G之内,但是却是在进程地址空间之外,当然映射完了就应该是进程内的虚地址了。这是我想要的,但到底是不是,我也无从考证。

(mmap这样的用法在PC上似乎有些发烧友的感觉。)

还请各位提提意见。
回复 支持 反对

使用道具 举报

发表于 2008-8-13 11:39:22 | 显示全部楼层
Post by future_god;1885396
在3G之内,但是却是在进程地址空间之外,当然映射完了就应该是进程内的虚地址了。这是我想要的,但到底是不是,我也无从考证。

(mmap这样的用法在PC上似乎有些发烧友的感觉。)

还请各位提提意见。


future_god  
第一、
3G的意思是Linux中用户空间使用虚拟地址的空间(内核空间是1G),x86/ARM都是这样的
这和你的内存是不是32M没有关系。
第二、
既然你的内存是32M,那么无论mmap或者malloc都是从这个内存里面出来的。不是说你用了mmap就可以凭空多出来内存

第三、
我们不明白你进程里,进程外的内存有什么区别,因为对于一个进程,使用malloc就可以增加其堆的空间

第四、那段英文的本意是多线程会占用几倍的栈空间,但是这种问题在有虚拟内存的Linux中,可以有编译器自动开出很大的栈空间,只是如果超出物理内存的限制,会有别的问题
回复 支持 反对

使用道具 举报

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

本版积分规则

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