C_and_CPP 板


LINE

已获得解答,外加一些测试结果比较请看最後面 原问题: 开发平台 VC++ ( 专案为clr专案,但此部分为un-managed ) 不好意思我想询问一个std::vector与c array效能问题. 我在google上查过这个问题,一般看到的说法都是表示两者之间效能是一样好的. (不管阵列长度会变化这件事情) 但是在我自己的一个专案中测试却发现c array的花费时间较短.不知道问题是出在哪里? 说明如下: 1. 我宣告一个class,内含一个std::vector,如下- class Class { public : std::vector< bool > m_vbParam ; } ; 2. 我宣告一个上述类别的全域变数物件 Class gsObj ; 3. [此物件已经resize完成,大小大约是10万左右.(因此是一个10万长度的bool vector)] 在一个全域函式中透过回圈access此全域变数的vector,回圈的index都没有超过长度 void Func1( void ) { for( i = 0 ... ) { gsObj.m_vbParam[ i ] ; // (操作取值及存值) } } 计算开始及结束的时间 4. 在另一个全域函式中传入一个C Array,然後作相同的事情 void Func2( bool *_cArray ) { for( i = 0 ... ) { _cArray[ i ] ; // (操作取值及存值) } } 计算开始及结束的时间 5. 将bool vector的内容复制给一个c array,并呼叫Func2() bool *cArray = NULL ; cArray = new bool[ gsObj.m_vbParam.size() ] ; for( i = 0 ; i < gsObj.m_vbParam.size() ; i++ ) cArray[ i ] = gsObj.m_vbParam[ i ] ; // 这边我本来想用memcpy,可是执行的时候会出错,烦请指点 void Func2( cArray ) ; delete [] cArray ; 6.比较Fun1. Fun2.的花费时间(不考虑取得记忆体,复制的时间) c array的时间 比 std vector快7倍左右. 可能的原因有 A global vs. local : Func1是去使用global变数,Func2是使用传入的array ptr. B vector in class : Func1的global物件内部的vector,较array来的麻烦. C vector vs. array : 长度很长的index下,效能真的有差别. D 其他. 虽然我觉得是不应该是这些原因,但结果确实如此.不知问题比较可能出在哪里? 感谢holymars说明,我改用unsigned char vector,就有提升效能了.我分别用 几种不同的函式参数,测试结果如下: A.使用std::vector<bool>(原来的旧方法) B.函式中使用全域物件内的std::vector< unsigned char >成员 FuncB(){ gsObj.m_vParam[ ... ] ... } C.函式呼叫时传入std::vector的reference FuncC( std::vector< unsigned char >& _param ){ _param[ ... ] ... } D.函式呼叫时传入由std::vector转型的unsigned char* FuncD( unsigned char* _param ){ _param[ ... ] ... } E.先将std::vector用memcpy复制为unsigned char array.然後传入 FuncE( unsigned char* _param ){ _param[ ... ] ... } 阵列长度大约在十万左右,回圈两层(游走总数不超过阵列长度), 回圈内共有三次取值,三次判断,一次assign. 花费时间 参考比例 A. 14.93 ms 7.35 B. 3.98 ms 1.96 C. 4.31 ms 2.12 D. 2.03 ms 1 E. 2.26 ms* 1.11 *E方法的时间包含记忆体宣告,复制过去,复制回来,记忆体释放 -- "May the Balance be with U"(愿平衡与你同在) 视窗介面游戏设计教学( http://0rz.tw/V28It ),讨论,分享。欢迎来信。 视窗程式设计(Windows CLR Form)游戏架构设计(Game Application Framework) 游戏工具设计(Game App. Tool Design ) 电脑图学架构及研究(Computer Graphics)论文代读(含投影片制作) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.96.77.176
1F:推 holymars:答案是vector<bool>不是一般的std::vector,是特化过的 11/16 15:09
2F:→ holymars:为了节省空间,牺牲了效率 11/16 15:09
3F:→ holymars:vector<bool>是用一个bit一个bit去存bool的 11/16 15:10
4F:→ holymars:喔对了 Effective C++里面有告诉你不要用vector<bool> 11/16 15:11
5F:→ holymars:因为它其实不符合作为一个STL容器的定义 11/16 15:12
6F:→ NDark:这样的话.我应该改用其他类别vector来达到我目的? 11/16 15:15
7F:推 holymars:对 你换成vector<int>和int[]再试一次吧 11/16 15:21
8F:→ holymars:vector<bool>是个美丽的错误,就和Valarray一样 11/16 15:22
9F:→ NDark:了解了....我会试看看的, 3q 11/16 15:30
10F:→ NDark:我加一些测试结果...请勿推文 11/16 16:08
11F:→ NDark:完毕.谢谢 11/16 16:29
※ 编辑: NDark 来自: 140.96.77.176 (11/16 16:30)
12F:推 holymars:测试程式是debug build还是release build? optimization 11/16 18:44
13F:→ holymars:的设定参数分别是? 11/16 18:44
14F:→ NDark:通通都是release,没有另外设定参数 11/16 19:05
15F:推 yoco315:然後如果你真的很坚持要 bool 的话请用 deque<bool> 11/16 21:16
16F:推 softwind:"std::vector转型的unsigned char*"? howto? 11/17 00:04
17F:→ NDark:(unsigned char*) &(*ucharvector.begin()) 11/17 09:24







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP