字符数组初始化之分析

2017-04-02  本文已影响0人  成江海

发现了一个字符数组初始化的误区,而这个往往能导致比较严重的性能问题,现在分享给大家。

往往我们在初始化一个字符 数组,大概有如下几种写法:

char array1[1024] ="";

char array2[1024] = {0};

char array3[1024] = {'\0'};

char array4[1024];

array4[0] ='\0';

但这四种写法,其实代表含义不同,看起来前三种写法只是将array的第一个字符置为0,其实前三种在gcc编译时,都是调用了memset来将整个array置为0,如果这个array很长,其实也会导致性能问题。我写了一个简单的小程序编译生成test,

字符串初始化四种写法

objdump了一下,执行“objdump -S test”可以看下面的代码:

objdump反汇编结果

所以,对这四种写法,实际执行的代码解释如下:

char array1[1024] ="";//如上图1处,调用memset将1023个字符置为0

char array2[1024] = {0};//如上图2处,调用memset将1024个字符置为0

char array3[1024] = {'\0'};//如上图3处,调用memset将1024个字符置为0

char array4[1024];

array4[0] ='\0';//如上图4处,只是将第一个字符置为0

而对于字符数组,往往只是作为一个字符串的临时缓冲区使用,没有必要将整个数组置为0,所以第四种写法往往就能达到初始化的目的。建议大家使用第四种写法来初始化一个字符数组,这样能节约很多性能消耗。

上一篇 下一篇

猜你喜欢

热点阅读