数组初始化引起的性能问题
2017-08-21 21:24
162 查看
数组初始化
// array.c int main() { char a1[1024] = ""; char a2[1024] = {0}; char a3[1024] = {'\0'}; char a4[1024]; a4[0] = '\0'; return 0; }
如上代码所示,前三种都是数组初始化的方法,a4仅仅初始化第一个元素。
// gcc 版本:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 $gcc -g array.c // 使用objdump查看程序汇编代码 $objdump -S a.out
如下图所示:
由此可知,数组a1,a2,a3都初始化整个数组为0,而a4仅初始化第一个元素。
总结
在程序中若使用较长数组时,初始化是非常消耗CPU的操作。对性能敏感的程序请谨慎选择初始化,最好优先预估一个正确的缓冲区长度,避免过大缓冲区初始化时消耗CPU。使用数组做临时缓冲时,在得知数据长度len时,完成复制后可设置
a[len] ='\0',而不必完全初始化。
当初始化的缓冲区很大时,初始化工作由memset函数完成;这里buf长度为1024,当设置为1024*1024时,可以看到程序调用了memset;因此缓冲区初始化根据长度不同使用不同的策略。
相关文章推荐
- Java和guava关于hashmap在初始化的时候最好给个初始容量,避免扩容引起性能问题的探究。
- SQL优化技巧--远程连接对象引起的CTE性能问题
- char 数组的初始化问题
- Race Condition引起的性能问题
- Race Condition引起的性能问题
- 字符数组、字符串的声明及初始化问题
- 字段类型修改引起的性能问题
- java数组定义及初始化+print打印问题
- 字符串数组的初始化问题
- 关于数组和数组初始化的问题
- 初始化动态分配的数组问题
- 关于字符指针和字符数组初始化的问题
- PHP5.2 $arr = [] 初始化数组出现问题
- 性能测试问题解决——消息头缺失引起的400错误
- 1754:字符串数组排序问题(4.1算法之排序和算法性能)
- 数组初始化与使用的问题
- 记一次处理oracle分区表索引"乱用"引起的SQL性能问题
- jradius session lock引起的性能下降问题排查
- 表索引字段嵌套函数引起的性能问题
- Race Condition引起的性能问题