美文网首页
字符数组初始化之分析

字符数组初始化之分析

作者: 成江海 | 来源:发表于2017-04-02 17:41 被阅读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,所以第四种写法往往就能达到初始化的目的。建议大家使用第四种写法来初始化一个字符数组,这样能节约很多性能消耗。

    相关文章

      网友评论

          本文标题:字符数组初始化之分析

          本文链接:https://www.haomeiwen.com/subject/mvmgottx.html