水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
1/1
|
转到
主题:求一个resize时不初始化的轮子
楼主
|
Akyrum
|
2020-01-18 11:17:40
|
展开
类似QByteArray,谢谢。
--
FROM 223.104.20.*
1楼
|
Akyrum
|
2020-01-18 11:47:21
|
展开
我用vector<float>做缓冲,每次来数据都先
resize到目标大小再copy,耗时有点大。是不是我用
法不对?
【 在 Akyrum (人類に栄光あれ) 的大作中提到:
】
: 类似QByteArray,谢谢。
--
FROM 223.104.20.*
3楼
|
Akyrum
|
2020-01-18 14:13:08
|
展开
我代码是先resize增大几M,然后DeviceIoControl()收usb传来的数据
【 在 kirbyzhou (下雪 你那边下雪了么?) 的大作中提到: 】
: 你先reserve空间,然后insert或者push_back。
: 你贴stl的代码干啥,贴你的应用代码呀。
: ※ 修改:·kirbyzhou 于 Jan 18 13:36:12 2020 修改本文·[FROM: 223.104.3.*]
: ...................
--
修改:kirbyzhou FROM 223.104.3.*
FROM 219.133.46.*
5楼
|
Akyrum
|
2020-01-18 16:29:22
|
展开
release,点属性进去看,确认选了o2。
有没有接口和vector一样的连续内存容器呀,换上就能提速10%+呢,懒得自己轮了。
【 在 fanci 的大作中提到: 】
: 测时间的这个截图是 Debug 还是 Release build?
--
FROM 223.104.20.*
7楼
|
Akyrum
|
2020-01-18 16:49:49
|
展开
关键是insert()/emplace_back()和c风格的函数不搭,在这里我调用DeviceIoControl()之前得准备好连续内存空间。
【 在 here080 的大作中提到: 】
: 你试试clear -> reserve?
: 记得用push_back :
--
FROM 223.104.20.*
10楼
|
Akyrum
|
2020-01-18 19:04:39
|
展开
我好像记的QByteArray是resize不填0?
重新申请内存是必要的,我不想要的是每次resize顺带的给新元素全填0。二楼那个程序反复clear()resize()erase()resize(),填0那两行代码居然耗时11%....
我承认用vector的方式不对,要么重新设计算法逻辑要么换轮子,后者省事些
【 在 hgoldfish (老鱼) 的大作中提到: 】
: QByteArray 在 resize 的时候也重新申请内存。
: 不过 QByteArray 和 QList 都有 reserve(),用好的话可以省下申请内存的开销。
: QList 对于对象,一般采用指针,不论怎么样,都不存在调用复制构造函数的开销。
--
FROM 219.133.46.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版