怎么在原有的基础上扩展申请的内存大小

Zimmerk XXXXX 2010-07-09 02:04:25
假如有以下语句: BYTE *pBuffer=new BYTE[10240];
后来我发现空间不够用了(原来读入的已经清除,现在又重新读入数据),想把原来的空间扩大,连续和不连续的都可以,那我应该怎么办能?

前提是我不知道读入的数据最大是多少。而这个缓冲区要使用多次,所以使用完一次删除,再申请一次这样效率很低下,大家有什么办法么?
照旧,可以不写代码,说说自己的看法
...全文
51 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zimmerk 2010-07-09
用类似于realloc 的方法我还不如直接new delete 这样更快
也很难做算大小,因为数据是从文件读入的,而这个文件的大小是未知的,就像图片文件一样,小的几K都有,大的几M也有,相差太大了,看来只能用内存池解决的,不过还是谢谢大家
回复
精锐掷矛手 2010-07-09
这样的话只能定一个大的静态数组做缓冲区,你应该能估计数据大最大使用空间,每次memset、memcpy。当然你也可以可以把静态数组做缓冲区分成几个块,每个块的最大空间是你一次数据的最大空间,然后一块一块的存数据,一块一块的取数据,就相当于队列。
回复
向立天 2010-07-09
CArray你可以查MSDN
不过原理就是你说的请一个更大的空间把原来的数据复制过去而已
回复
Zimmerk 2010-07-09
啊 realloc 不过是又申请一个更大的空间把原来的数据复制过去而已(我之前已经清空原来的数据了,如果再这样效率不是更低下了?
CArray和vector<BYTE>都不是很熟悉,能说说看么?
内存池这个我也再考虑,不过要自己写我想工程量还是挺大的,我想以后有时间再研究一下,大家还有其它办法么?
回复
Eleven 2010-07-09
vector<BYTE> ...
回复
cdsnpeter 2010-07-09
若你是这种基本类型,建议使用C风格的申请内存方式,malloc()和relloc();
回复
向立天 2010-07-09
可以考虑用CArray
回复
精锐掷矛手 2010-07-09
使用内存池,你的问题就都解决了。
回复
jieleiping 2010-07-09
realloc
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告