<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/</link>
<title><![CDATA[mmap使用]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Sat, 11 Jun 2011 17:35:37 +0000</pubDate> 
<guid>http://www.snooda.com/read/</guid> 
<description>
<![CDATA[ 
	    最近用到opencv库，该库只能从文件中载入图像，而我的数据是在内存中的。需要将数据映射到文件再供opencv使用，于是想到mmap。<br />
     mmap主要是用来将文件的内容映射到内存地址，而将内存中的内容映射到文件不知行不行，于是决定尝试一下。<br />
<br />
    于是将mmap的第一个参数设置为存放数据的存储区指针，大小设置为数据大小，文件描述符为打开的一个空文件。发现映射前后内存区数值未变化，但是文件内容并未变化，调用msync无效，后来发现映射后的地址和传入的地址不同，原来已被使用的内存地址不能用来mmap，函数自动调整了映射位置，后来又做了些测试，总结如下特性：<br />
    1，mmap不能改变对应文件的大小，比如文件之前10k，即使映射100k，文件还是10k。<br />
    2，mmap映射大小和文件大小无关，10k的文件可以映射100k出来，当然后90k其实是无意义的。<br />
    3，mmap映射后的内存大小以映射时指定大小为准，比如10k文件映射100k，那么对于映射地址可操作的地址空间是100k。<br />
    4，mmap只向文件同步修改过的内容，而不是同步不一致的内容，比如映射了10k，目标内存地址原内容和文件内容完全不同，后修改了指定内存地址1k的内容，同步后文件只有1k的内容修改。<br />
<br />
    以上只是通过测试得出的特性，具体mmap的实现原理还有待读代码体会。
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/#blogcomment</link>
<title><![CDATA[[评论] mmap使用]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.snooda.com/read/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>