程序运行时需要建立一棵树,共有四层:
第一层: 根结点
/ | \
第二层: 节点1 节点2 节点3 ……
/ | \
第三层: 节点1 节点2 ……
/ | \
第四层: 节点1 节点2 ……建立好之后,我把树写入了文件,以后可以从文件读入内存。
但是发现在读写树的时候,内存占用特别多。明明文件只有3兆,这棵树建立后占用内存达到了30多兆,如果过了一段时间(或者将程序最大化、最小化这么切换一下),占用的内存又比较小了。百思不得其解。
估计是内存页面调度太频繁引起的,实际上可能没有占用这么多内存。所以想事先申请一个大的空间,比如文件大小的2倍,然后每个节点都在大空间里生成。请问应该如何实现?每一层节点的大小不一样。
最好给出一点源代码。多谢了,在线给分!
第一层: 根结点
/ | \
第二层: 节点1 节点2 节点3 ……
/ | \
第三层: 节点1 节点2 ……
/ | \
第四层: 节点1 节点2 ……建立好之后,我把树写入了文件,以后可以从文件读入内存。
但是发现在读写树的时候,内存占用特别多。明明文件只有3兆,这棵树建立后占用内存达到了30多兆,如果过了一段时间(或者将程序最大化、最小化这么切换一下),占用的内存又比较小了。百思不得其解。
估计是内存页面调度太频繁引起的,实际上可能没有占用这么多内存。所以想事先申请一个大的空间,比如文件大小的2倍,然后每个节点都在大空间里生成。请问应该如何实现?每一层节点的大小不一样。
最好给出一点源代码。多谢了,在线给分!
具体用法请查阅MSDS相应关键字
MyStructNode mystructnode = (MyStructNode *)内存空间的地址
然后写入相应的信息,计算这个结构体的偏移量,再重复上述过程。
因为现在用的CArchive,它已经开辟缓冲区读写数据了,如果再建内存映射文件,会不会太耗资源了。
我先试试用序列化把数据发放到一大块内存里,再去尝试操作内存映射写文件好了。
多谢!