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

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

前提是我不知道读入的数据最大是多少。而这个缓冲区要使用多次,所以使用完一次删除,再申请一次这样效率很低下,大家有什么办法么?
照旧,可以不写代码,说说自己的看法
...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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