Chinaunix

标题: 内存别名? [打印本页]

作者: _nosay    时间: 2017-07-21 11:10
标题: 内存别名?
让同一进程中,不同的虚拟地址,映射到相同的物理地址,不改内核,有什么方法实现吗?

作者: amarant    时间: 2017-07-21 15:07
本帖最后由 amarant 于 2017-07-21 15:08 编辑

用 vmap 函数

作者: _nosay    时间: 2017-07-21 15:32
回复 2# amarant

应用程序能使用不?
作者: amarant    时间: 2017-07-21 18:57
回复 3# _nosay

mmap /dev/mem

作者: _nosay    时间: 2017-07-22 07:11
回复 4# amarant

实际需求是这样: 有两块内存A,B,我想把他们内容拼在一起进行数据分析,但不想分配一块大的内存,分别把A,B复制过去,而是想只分配一块虚拟空间,直接将A,B对应的物理地址映射到这块虚拟空间
作者: qianguozheng    时间: 2017-07-24 14:20
mmap不行吗?
作者: _nosay    时间: 2017-07-24 15:33
回复 6# qianguozheng

噢,还有一个重要的要求,一个进程同时会有大量这样需要拼凑的数据,比如A、B,C、D,AB要拼在一起,CD要拼在一起,但只有一个/dev/mem,所以之前放弃了mmap()的方法。
作者: qianguozheng    时间: 2017-07-24 16:44
读完就释放不行吗?
作者: _nosay    时间: 2017-07-24 17:47
回复 8# qianguozheng

我的目的是这样:http不管是chunked方式传输,还是指明了content-length,我都是用小块的内存接收并链起来,这样一方面可以解决chunked时,一开始不知道为接收数据分配多大的内存,另一方面可以灵活的释放一个http连接中已经分析过的数据,不至于这个http连接结束之前,始终占用content-length长度的内存。
作者: qianguozheng    时间: 2017-07-24 21:38
要是这样子没必要分配内存啊,可以分配一个很大的内存池,把数据放进去,收到的就放进去,超过就重新申请内存。
感觉你这样就把问题搞复杂了
作者: _nosay    时间: 2017-07-25 06:45
回复 10# qianguozheng

原来分配的内存不够继续存了,就转移到大的内存,这样有个复制过程,抓包程序对效率要求很高,所以这样不行

作者: qianguozheng    时间: 2017-07-25 10:54
整个链表来管理内存不行吗?把http的数据防到这个链表里面,用的时候就去读。

你说的情况,只要需要解压或者解决trunk都需要一个大的空间吧。
作者: nswcfd    时间: 2017-08-04 10:56
一般都是调整算法,从只支持一片连续内存,到支持N个不连续的内存块。

好吧,这可能不是楼主想要的。
作者: _nosay    时间: 2017-08-04 12:04
回复 12# qianguozheng

我以前实现过,可以直接从链表连接的数据块,解析chunk格式,和解压压缩的http数据,即使既是chunk又是压缩的数据,也不用先复制到一块连续内存处理。现在是想换个思路,看能不能把实质不连续的内存,映射到连续的虚拟内存处理。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2