谁来解答下!!memset,for,while,fill()初始化数组的效率对比...
来源:互联网 发布:iphone4s屏幕解锁软件 编辑:程序博客网 时间:2024/05/17 00:17
我的多次结果还是memset最快,但网上有说for()循环初始化数组比memset快的(在int下),因为memset每次只能操作一个字节。不知道大家测出来结果如何或这是我的测试程序原理错了?
- #include <iostream>
- #include <algorithm>
- #include <ctime>
- using namespace std;
- const int n=10000000;
- template<class T>
- class TEST{
- private:
- long out,a1,b1,c1,d1;
- T *a,*b,*c,*d;
- void test_unity(const T &x,const T &y){//memset的赋值有点特殊,所以单独设置变量x
- clock_t start, finish;
- //a.for memset
- start = clock();
- memset(a,x,sizeof(T)*n);
- finish = clock();
- out=finish-start; a1+=out;
- //cout<<"memset"<<endl;
- //b.for for()
- start = clock();
- for(int i=0;i<n;i++) b[i]= y ;
- finish = clock();
- out=finish-start; b1+=out;
- //cout<<"for"<<endl;
- //c.for while()
- start = clock();
- int i=0;
- while(i<n) c[i++] = y;
- finish = clock();
- out=finish-start; c1+=out;
- //cout<<"while"<<endl;
- //d.for fill()
- start = clock();
- fill(d,d+n, y );
- finish = clock();
- out=finish-start; d1+=out;
- //cout<<"fill"<<endl;
- }
- public:
- TEST(T x1,T y1,T x2,T y2,T x3,T y3){
- a1=b1=c1=d1=0;
- a=new T[n];
- b=new T[n];
- c=new T[n];
- d=new T[n];
- for(int i=0;i<5;i++){
- test_unity(x1,y1);
- test_unity(x2,y2);
- test_unity(x3,y3);
- }
- cout<<"memset() :"<<a1<<endl
- <<"for() :"<<b1<<endl
- <<"while() :"<<c1<<endl
- <<"fill() :"<<d1<<endl<<endl;
- }
- virtual ~TEST(){
- delete []a;
- delete []b;
- delete []c;
- delete []d;
- }
- };
- int main() {
- cout<<"int:"<<endl;
- TEST<int> test1(-1,-1,0,0,5,84215045);
- //test1.~TEST();
- cout<<"short:"<<endl;
- TEST<short> test2(-1,-1,0,0,5,1285);
- //test2.~TEST();
- cout<<"long:"<<endl;
- TEST<long> test3(-1,-1,0,0,5,84215045);
- //test3.~TEST();
- cout<<"char:"<<endl;
- TEST<char> test4(0,0,'a','a','9','9');
- //test4.~TEST();
- cout<<"bool:"<<endl;
- TEST<bool> test5(0,0,true,true,false,false);
- //test5.~TEST();
- cout<<"long long:"<<endl;
- TEST<long long> test6(-1LL,-1LL,0LL,0LL,5LL,361700864190383365LL);
- //test5.~TEST();
- return 0;
- }
最终结果,memset最快,测试的数据类型的字节越小越有优势,foe与while相差无几,fill最慢,看了下SGI下的fill()的源代码,采用的是for(;first!=last;first++) *first=val;的方式,然后针对char型的是用的memset,我的理解是因为memset对多字节的数据类型不能赋成特定的值,所以才采用的for(),也间接说明了memset比for应该要快吧。。
以上仅是个人猜测,不对的地方还望指出,谢谢,发邮件也行,liliflashfly@gmail.com
- 谁来解答下!!memset,for,while,fill()初始化数组的效率对比...
- 初始化测试,memset,for,fill
- 初始化测试,memset,for,fill
- memset和fill的对比
- 字符串数组初始化0 与memset 0 效率的分析
- 字符串数组初始化0 与memset 0 效率的分析
- 字符串数组初始化0 与memset 0 效率的分析
- 字符串数组初始化0 与memset 0 效率的分析
- fill和memset 数组填充跟数组初始化
- while与for执行效率对比
- memset对数组的初始化
- fill memset, for小测试
- 【转】字符串数组初始化0 与memset 0 效率的分析
- while循环与Iterator的效率对比
- memset 函数, fill函数的区别及应用, fill函数给多维数组赋值。
- 【C++】别再用memset初始化int数组了,用fill或者fill_n靠谱多了
- fill和memset的区别
- memset和fill的区别
- [双语阅读]美联社年度十大新闻 奥巴马当选排首位
- CNOUG 里比较有意思的一个SQL
- spring源码分析-XmlBeanFactory导读
- 很烦开心网(Kaixin.com)的做法!
- 社交场合如何脱身?
- 谁来解答下!!memset,for,while,fill()初始化数组的效率对比...
- java中文问题的分类
- 人道主义援助
- thickbox.js插件学习
- 反射得到类的字段名
- [双语阅读]传茱莉向皮特求婚遭拒
- .NET Remoting安全性
- C# .net中cookie值为中文时的乱码解决方法
- 怎样做好网站规划?