关于内存映射文件大小的问题

wintergoes 2009-05-24 08:37:13
从网上看说内存映射文件的大小在运行期是不能被更改的,是否是这样?
如果我想增加映射文件的内容时,就要在创建的时候创建一个足够大的内存对象,这样如果我用不了这么多空间,保存的文件后面是不是会有一大堆空白的地方?
请大侠指教
...全文
168 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)的
  • 打赏
  • 举报
回复
操作系统的内存管理是虚拟内存
虚拟地址
对单个应用程序来说是看起来很多空白
但是实际上是断断续续的空间~~

16,746

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧