数组赋值方式性能比较
测试代码:
#include
#include
#include
#include
#include int main()
{//-----------测试char数组----------
char b[1000000];
// 测试memset
clock_t mem_start = clock();
memset(b, 1, 1000000);
clock_t mem_end = clock();
// 测试标准库算法fill
clock_t fill_start = clock();
std::fill_n(b, 1000000, 1);
clock_t fill_end = clock();
// 测试for循环赋值
clock_t for_start = clock();
for (int i=0;
i<1000000;
i++){
b[i] = 1;
}
clock_t for_end = clock();
std::cout<<"test char array : "< "<<(mem_end-mem_start)<<" ms"< "<<(fill_end-fill_start)<<" ms"< "<<(for_end-for_start)<<" ms"< "<<(fill_end-fill_start)<<" ms"< "<<(for_end-for_start)<<" ms"<
测试代码输出结果:
test char array :
memset cost time -> 1409 ms
fill cost time -> 1990 ms
for cost time -> 1872 mstest no char array :
fill cost time -> 2523 ms
for cost time -> 1915 ms
结论:
从测试结果可以看出:
(1) 对于char类型数组,使用memset函数赋相同初始值最优;
(2) 对于非char类型数组,使用for循环赋相同初始值最优;
(3) 使用标准库函数fill_n进行赋初值性能最差.
为什么只有char类型数组可以用memset ?
【c++ 如何实现数组快速赋相同的值】测试代码:
#include
#include
#include int main()
{//------测试char数组------
char b[3];
memset(b, 1, sizeof(b));
//------测试非char数组------
int a[5];
memset(a, 1, sizeof(a));
std::cout<<"test char value : "<<(int)b[0]<<" "<<(int)b[1]
<<" "<<(int)b[2]<
输出结果:
test char value : 1 1 1
test no char value : 16843009 16843009 16843009
原因
memset是按字节进行赋值,一个int类型是4个字节,所以单个int数组元素值为: 00000001 00000001 00000001 00000001,转换成10进制数即为16843009.
因此对于非char类型数组不推荐使用memset !!!
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题