是这样的,我在内存中建好了一棵树,要在别的程序中使用这棵树,我就把这段内存中的内容存到文件中,然后用内存映射将这个文件映射到另一个程序的进程地址空间(这样应该是可行的吧?)。    但是我把内存中的树存到文件中后,发现文件很大,用HEX EDIT 打开看的时候里面有很多 00 (因为树中有很多指针)。    我就想是否可以把这个文件压缩一下?有两个问题:(1)哪里有压缩解压的源吗?(2)压缩之后,我该怎么在另一个程序中使用这棵树?

解决方案 »

  1.   

    是这样的,我在内存中建好了一棵树,要在别的程序中使用这棵树,我就把这段内存中的内容存到文件中,然后用内存映射将这个文件映射到另一个程序的进程地址空间(这样应该是可行的吧?)。
    //当然可以    但是我把内存中的树存到文件中后,发现文件很大,用HEX EDIT 打开看的时候里面有很多 00 (因为树中有很多指针)。    我就想是否可以把这个文件压缩一下?有两个问题:(1)哪里有压缩解压的源吗?(2)压缩之后,我该怎么在另一个程序中使用这棵树?
    //(1)很多,比如zlib等。(2)解压缩之后使用。
    不过既然是两个进程同时运行,进程A要压缩,然后写入文件,然后进程B要读文件,然后解压缩,感觉反而更浪费空间。不如在进程A直接把树序列化到内存映象文件,然后在进程B序列化出来好了。没必要压缩解压缩
      

  2.   

    很感谢楼上的指导!
        但我的意思是这样的,我这棵树建好之后只是用来检索,而不用去修改它,因此我只是用进程A来建树,建好之后,再在进程B中用这个树就行了,所以并不需要两个进程同时运行。现在是我把树存到文件中之后文件有点大(影响发布),因此我想到是否可以在存文件的时候先压缩,然后在进程B中用相应的解压缩算法来解压这个内存映象文件。
        因为我对压缩解压不太懂,是否解压之后非得形成一个新的文件?这时候我在进程B中怎么对树进行检索?
        谢谢!
      

  3.   

    //没搞懂你的意思。因为我对压缩解压不太懂,是否解压之后非得形成一个新的文件?这时候我在进程B中怎么对树进行检索?//你看一下LZO算法:http://www.oberhumer.com/opensource/lzo/这个可以在内存里面做压缩解压缩。