社区
语言基础/算法/系统设计
帖子详情
关于内存映射文件大小的问题
wintergoes
2009-05-24 08:37:13
从网上看说内存映射文件的大小在运行期是不能被更改的,是否是这样?
如果我想增加映射文件的内容时,就要在创建的时候创建一个足够大的内存对象,这样如果我用不了这么多空间,保存的文件后面是不是会有一大堆空白的地方?
请大侠指教
...全文
185
7
打赏
收藏
关于内存映射文件大小的问题
从网上看说内存映射文件的大小在运行期是不能被更改的,是否是这样? 如果我想增加映射文件的内容时,就要在创建的时候创建一个足够大的内存对象,这样如果我用不了这么多空间,保存的文件后面是不是会有一大堆空白的地方? 请大侠指教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yshuui
2009-05-25
打赏
举报
回复
空白是#0
thenshesaid
2009-05-24
打赏
举报
回复
用二进制编辑软件打开TXT看看,后面不一定就是SPACE
wintergoes
2009-05-24
打赏
举报
回复
谢谢各位,我把一段代码贴上来,是DELPHI的,加了注释
procedure TForm1.btnCreateClick(Sender: TObject);
var
PText, Ps: PChar;
ErrorID: DWord;
strSource: string;
begin
// 文件句柄
fHandle := CreateFile(PChar('c:\response.txt'), GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN, 0);
// 用fHandle创建内存映射对象,大小为500字节
MapViewHandle := CreateFileMapping(fHandle, 0, PAGE_READWRITE, 0, 500, 'MapViewTest');
// 获取映射对象的指针地址
PText := MapViewOfFile(MapViewHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
// 给字符串变量赋值
strSource := '123fjfjsoijdfoiejflkdsjflsjdfoiejwoijfsjdfljd';
// 将字符串内容复制到映射对象中
StrCopy(PText, PChar(strSource));
// 关闭映射对象和文件句柄
CloseHandle(MapViewHandle);
CloseHandle(fHandle);
end;
这个过程对txt文件进行了修改,文本文件的内容为'123fjfjsoijdfoiejflkdsjflsjdfoiejwoijfsjdfljd'后面由很多个空格,就是把500个字符填充满了
会思考的草
2009-05-24
打赏
举报
回复
事实上提交的是一段虚拟地址空间,不一定当时就请求分配物理内存。
地球人呢
2009-05-24
打赏
举报
回复
我以前用过内存映射文件,运行时确定是没办法改变大小, 不过在你确定的文件的实际大小后,可以利用BOOL SetEndOfFile( HANDLE hFile )改变物理文件大小.
biweilun
2009-05-24
打赏
举报
回复
是有空白没错 很多人初始化的时候都memset(...,0)的
我编人生不编程
2009-05-24
打赏
举报
回复
操作系统的内存管理是虚拟内存
虚拟地址
对单个应用程序来说是看起来很多空白
但是实际上是断断续续的空间~~
vc文件操作,
内存映射
本文详细介绍VC++中处理大文件的技术,包括使用
内存映射
文件进行高效读写、解决
文件大小
限制
问题
及优化磁盘I/O操作。
逆序存储文件(三)——文件
内存映射
本文探讨了对于大文件逆序存储,传统方法在面对几M到几G文件时性能不足的
问题
。文章介绍了使用
内存映射
技术,通过创建文件句柄、映射对象句柄、映射到进程地址空间、操作、解除映射和关闭资源来实现文件操作,以提高读写性能。实验结果显示,
内存映射
方法在处理17M文本文件时的性能远超其他方法。需要注意的是,对
内存映射
原理的理解需要加强,并根据
文件大小
调整映射策略。
linux对空文件mmap后的Bus Error
问题
本文介绍了一个EMMC测速程序中出现BusError的
问题
及解决方案。通过在
内存映射
前设置
文件大小
,避免了因空文件mmap映射导致的错误。
JDK神器之jmap(java
内存映射
工具)
本文介绍了JDK中的jmap工具,它用于获取Java进程的
内存映射
和堆内存细节。通过jmap可以生成堆转储快照,分析内存泄漏和性能
问题
。文章详细解释了jmap的命令格式、参数使用以及在项目实践中的注意事项,包括权限、性能影响和
文件大小
问题
。最后,探讨了jmap的实现原理,包括JVMTI和SA技术。
linux mmap出现Address 0x7ffff7ff6000 out of bounds>
本文详细解读了使用mmap函数在C语言中进行
内存映射
的过程,并通过实例展示了如何处理
文件大小
为0导致的
内存映射
问题
。通过修改代码确保
文件大小
不为0,避免了出现总线错误的核心转储现象。
语言基础/算法/系统设计
16,742
社区成员
33,234
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章