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

字符数组初始化之分析

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

相关文章

  • 八月二十五

    PHP数组之关联数组初始化 关联数组是指数组的键是字符串的数组。 $fruit = array( 'apple'=...

  • C++ 字符数组与字符串的使用及加结束符'\0'的问题

    1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str[10]...

  • 字符数组初始化之分析

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

  • swift变量

    值类型:字符串,数组,字典,数字 引用类型:Class 字符串 数组初始化 Array遍历

  • C语言 测试

    数组和指针都可以在定义中用字符串初始化; char a[] = "abcd"; //字符串常量初始化的数组是可以修...

  • 2.5.5-C语言入门-字符数组

    1.字符数组的初始化:两种初始化方法 2.字符数组的输入输出 scanf输入,printf输出-两种格式 格式一:...

  • C语言字符串☀️

    版权声明:本文为博主原创文章,未经博主允许不得转载。 1、字符数组的定义与初始化 字符数组的初始化,最容易理解的方...

  • C语言中字符数组的初始化与赋值

    1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符...

  • php基础精粹

    PHP php数组 php数组之索引数组初始化 PHP数组之索引数组赋值 PHP数组之访问索引数组内容 PHP数组...

  • 流程控制与数组(数组)

    数组 定义数组 数组的显示初始化 输出字符串和字符串函数 ANSI C提供了如下常用的标准函数来处理C字符串

网友评论

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

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