字符数组初始化之分析

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

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

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,所以第四种写法往往就能达到初始化的目的。建议大家使用第四种写法来初始化一个字符数组,这样能节约很多性能消耗。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 s...
    JaiUnChat阅读 5,566评论 0 7
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 6,182评论 0 7
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,087评论 0 35
  • 前两天受凉感冒了,感觉内在发冷,手指尖是凉的,胃翻江倒海,恶心。量了下体温,有点发烧了!心里暗暗窃喜:现在都...
    李文燊阅读 1,677评论 0 0
  • 我在犹豫 犹豫我是否该去觅寻这来的秋 我最终披上了上衣 秋啊,你在哪呢 阳光的妩媚 蒸笼般的森林雾气弥漫 有犹少女...
    零温度阅读 1,046评论 0 1