作者:quke.cn |
分类:VC/C++| GAE的第三方上传工具SDUpload。 |
| 获取谷歌地图当前位置坐标 |
| 图解SDBlog1.0Beta。 |
| VS2008安装时与Office2007的冲突 |
| 关于 |
| 留言本 |
| SDBlog介绍-开始提供下载了。 |
| VS2008中使用SVN的方法 |
| Python中文全攻略 |
| c++中抽象类、虚函数和纯虚函数的学习 |
百科上的介绍
CMemFile为支持内存文件的CFile的派生类。内存文件的行为类似于磁盘文件,所不同的是该文件存储在RAM中,而不是磁盘上。内存文件用于快速暂时存储,以及在独立的进程间转换字节或可串行化的对象。
CMemFile对象能够自动地分配它们的内存空间,或通过调用Attach函数为CMemFile对象附加内存块。另一种情形,如果nGrowBytes非零,那么将自动地以nGrowBytes为单位为增加的内存文件分配内存。
可以通过提供的指针访问内存块,此时可以通过调用Detach函数将其从CMemFile对象中分离出来。
CMemFile函数最一般的用途是创建CMemFile对象,并通过调用CFile成员函数来使用它。值得注意的是当创建CMemFile后将自动得打开它:不要调用仅仅用于磁盘文件的CFile::Open函数,其原因在于没有使用数据成员CFile::m_hFile。
CFile成员函数Duplicate, LockRange和UnlockRange对于CMemFile无效。如果在CMemFile对象中调用了这些函数,那么将获得CnotSupported Exception。
CMemFile使用了运行库函数malloc, realloc,和free来分配、重新分配和释放内存,而原有的memcpy函数在进行读写时,可以块拷贝。如果希望改变这种行为或CMemFile增大文件的行为,那么应当从CMemFile中派生自己的类,并辅以适当的函数。
#include <afx.h>
CMemFile类的成员
构造函数
CMemFile 构造一个内存文件对象
操作
Attach 附加内存块到CMemFile中 Detach 从CMemFile中分离内存块,并返回被分离的内存块的指针
高级可覆盖的函数
Alloc 可覆盖以用于修改内存分配行为 Free 可覆盖以用于修改释放内存行为 Realloc 可覆盖以用于修改重新分配内存行为 Memcpy 可覆盖以用于读写时修改内存拷贝行为 GrowFile 可覆盖以用于修改文件增大时的行为
其他
CMemFile is the CFile-derived class that supports memory files. These memory files behave like disk files except that the file is stored in RAM rather than on disk. A memory file is useful for fast temporary storage or for transferring raw bytes or serialized objects between independent processes.
CMemFile是内存文件,如果说CFile的对象放在磁盘里,那么CMemFile的对象则滞留在内存当中,但在程序中使用CMemFile时往往内存使用居高不下,内存成线性增长。
使用CMemFile的步骤往往是
BYTE * pbuf = new BYTE[BUFSIZE];
……将文件数据写入pbuf……
CMemFile memfile.Write(pbuf,size);
BYTE *pbyte = (BYTE *)memfile.Detech();
//问题就在这!你注意到内存块脱离的内存文件,但没有释放!!
delete pbyte;//这样释放后就可以解决问题了!
//但是我不知道正统的做法是怎样的?
//因为正规的程序里new和delete是成对出现的。
//问题是解决了,待续……
固定链接:http://www.quke.cn/log-358.html
2010-02-2 11:58 AM |
浏览:
评论: