COM 中内存映射文件和虚拟内存的问题
2009-07-28 09:24
351 查看
1.发现在com组件中使用内存映射文件时,当文件过大时出现问题。但是在普通可执行文件中使用则正常。
2.发现在com组件中使用虚拟内存也会出现一样的问题。
3.目前还没有找到好的解决方案。
问题描述
HANDLE hFile = ::CreateFile( p_csName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY, NULL );
if( hFile != INVALID_HANDLE_VALUE )
{
// 创建文件映射对象,如果创建失败,则进行错误处理
HANDLE hMap = ::CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, 0, NULL);
DWORD dwSize = 0;
if( hMap )
{
。。。 。。。
::UnmapViewOfFile( pBaseAddr );
}
::CloseHandle( hFile );
}
这段代码在可执行程序中执行很正常,但是在vc6编写的com组件中无法打开500M意思的大文件,提示是内存不够。但是实际上物理内存和虚拟内存都是很充足的。目前还没有解决。
已经解决原来是和内存碎片相似的问题。
2.发现在com组件中使用虚拟内存也会出现一样的问题。
3.目前还没有找到好的解决方案。
问题描述
HANDLE hFile = ::CreateFile( p_csName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY, NULL );
if( hFile != INVALID_HANDLE_VALUE )
{
// 创建文件映射对象,如果创建失败,则进行错误处理
HANDLE hMap = ::CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, 0, NULL);
DWORD dwSize = 0;
if( hMap )
{
。。。 。。。
::UnmapViewOfFile( pBaseAddr );
}
::CloseHandle( hFile );
}
这段代码在可执行程序中执行很正常,但是在vc6编写的com组件中无法打开500M意思的大文件,提示是内存不够。但是实际上物理内存和虚拟内存都是很充足的。目前还没有解决。
已经解决原来是和内存碎片相似的问题。
相关文章推荐
- 用C语言读取大文件的问题 内存映射
- 虚拟内存与内存映射文件区别与联系
- Java 中使用内存映射文件需要考虑的 10 个问题
- 虚拟内存与内存映射文件区别与联系
- 虚拟内存与内存映射文件区别与联系
- 用C语言读取大文件的问题 内存映射
- 工作问题总结(三十)共享内存续(当文件映射对象的名称未知时)
- 关于用内存映射文件加、解密大文件的问题,谢谢!
- Java 中使用内存映射文件需要考虑的 10 个问题
- 虚拟内存机制和内存映射文件原理探索
- 大文件内数据排序问题:采用文件映射内存技术
- 用C语言读取大文件的问题 内存映射
- (转)虚拟内存与内存映射文件区别与联系
- 【java】内存映射文件、虚拟内存、RandomAccessFile类
- Java 中使用内存映射文件需要考虑的 10 个问题
- (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
- 设置tomcat虚拟内存大小,解决上传数据量大的文件,报内存溢出的问题。
- 用C语言读取大文件的问题 内存映射
- 数据共享,内存映射文件和虚拟内存,共享内存
- Java 中使用内存映射文件需要考虑的 10 个问题