- 主题:求一个resize时不初始化的轮子
我好像记的QByteArray是resize不填0?
重新申请内存是必要的,我不想要的是每次resize顺带的给新元素全填0。二楼那个程序反复clear()resize()erase()resize(),填0那两行代码居然耗时11%....
我承认用vector的方式不对,要么重新设计算法逻辑要么换轮子,后者省事些
【 在 hgoldfish (老鱼) 的大作中提到: 】
: QByteArray 在 resize 的时候也重新申请内存。
: 不过 QByteArray 和 QList 都有 reserve(),用好的话可以省下申请内存的开销。
: QList 对于对象,一般采用指针,不论怎么样,都不存在调用复制构造函数的开销。
--
FROM 219.133.46.*
我觉得你这个做法没啥问题。
【 在 Akyrum (人類に栄光あれ) 的大作中提到: 】
: 我用vector<float>做缓冲,每次来数据都先
: resize到目标大小再copy,耗时有点大。是不是我用
: 法不对?
: ...................
--
FROM 139.226.154.*
填 0 相当于是 resize 要求里面新增加的元素是默认值,
通常是用 256 bits 的寄存器加速的。
你自己 new 出来内存以后,
vector 里面有两个指针标记了堆上内存的开始和结束点,
如果你能把这两个指针的值设置一下就可以了。
我记得应该是能直接设置的。
当然你要先把之前的旧值 delete 掉。
【 在 Akyrum (人類に栄光あれ) 的大作中提到: 】
: 我好像记的QByteArray是resize不填0?
: 重新申请内存是必要的,我不想要的是每次resize顺带的给新元素全填0。二楼那个程序反复clear()resize()erase()resize(),填0那两行代码居然耗时11%....
: 我承认用vector的方式不对,要么重新设计算法逻辑要么换轮子,后者省事些
: ...................
--
修改:hoodlum FROM 139.226.154.*
FROM 139.226.154.*
不如先reserve
然后调用
最后hack一下vector的size
看看速度是否确实提升
从而确定 profiling 的结果是否可靠
因为有的时候 profile 显示的位置可能因为别的原因
【 在 Akyrum () 的大作中提到: 】
: release,点属性进去看,确认选了o2。
: 有没有接口和vector一样的连续内存容器呀,换上就能提速10%+呢,懒得自己轮了。
: 【 在 fanci 的大作中提到: 】
--
FROM 138.19.103.*