Loading......
Feb
2
内容载入中...
CMemFile的介绍
作者:quke.cn   |   分类:VC/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是成对出现的。

//问题是解决了,待续……

 

内容载入中...
  姓名(必填)
  邮箱(选填)
  主页(选填)
内容载入中...