new 的不是自己想要的大小

 事件起因为我开了很多线程,然后 对一个httpServer发送一些string的命令,最多大概发送个千把次,但是服务器有时候接受的string 会莫名奇妙的多一些字符串在末尾。

 

CSafeArrayVector<unsigned char>& varTmpData =(CSafeArrayVector<unsigned char>&)varData;// variant转variant 数组封装

 unsigned char*p = NULL;
 int count = varTmpData.size();
 p = new unsigned char[count]; //这里new的内容可能是上次已经存在的内容
 memset(p, 0,count);
 memcpy(p,varTmpData.begin(), count);// 虽然内存置0了,也是memcpy count字节, 但是 频繁的调用 这里 p 的内容会比你count多一部分数据,这里可能跟对齐有关系,现象就是我 new 是78个字节 memcpy也是78 但是这里p做完memcpy后 p[79] ,p[80]这个位子竟然还有值。而且不是 空值。

delete p;

 

换了一种思路,线程内不频繁开辟内存,虽然当前机器内存很够用:

做一个简单的内存管理,整个子线程开始先new一次内存,假如需要更多内存再多开辟一点,假如不需要更多内存,则每次使用这一块,只不过memcpy的时候只copy前面你需要的字节长度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值