作者meltice (三亿两千万大散户)
看板Programming
标题Re: [问题] 请问BCB6 的记忆体配置
时间Tue Sep 12 22:42:19 2006
※ 引述《fredfrost (幸福就是你)》之铭言:
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: Graphics::TBitmap *a=new Graphics::TBitmap;
: Graphics::TBitmap *b=new Graphics::TBitmap;
: a->Width=10000;
: a->Height=10000;
: b->Width=10000;
: b->Height=10000;
: }
: 我测试的时候 这麽几行 就跳出记忆体不足
: 只是开一个画布出来 还没开始画 我的目的是要画图 不是读图档
: 如果用纯c++ 应该也是不会当才是
: 所以应该是bcb的问题吧 不知道去哪改他的记忆体上限
不知道为何你一定要用TBitmap呢
像你这种大小的记忆体10000*10000*24bit = 300MB
就算用new也不见得能成功
至少我用VC测过new的限制大约几百MB左右(在我电脑上512 RAM)
如果可以的话试试看CreateFileMapping, MapViewOfFile, ... 这组API
详细用法请google
其实就是把一个档案map到虚拟记忆体空间
MapViewOfFile就是开(map)一扇窗户(view)来查看档案的一段内容
之後会得到一个pointer
用这个pointer就可以把档案当作记忆体一般做random access的动作
预设不指定档名则使用系统pagefile.sys这个档案
memory mapped file我有试过可以Create好几G以上的空间
可以从工作管理员看到记忆体用量暴增
(不过CPU loading并不会增加因为你还没作存取动作)
也可以看到pagefile.sys的大小一定会跟着爆增
所以我猜如果是NTFS磁区就看你硬碟可用空间还有多大
就可以成功create多大的file mapping
不过当然一个process一次最多只能map到2G的view
这是Win32的限制
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.204.133.140