免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2574 | 回复: 6
打印 上一主题 下一主题

结构体初始化效率 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-02 23:07 |只看该作者 |倒序浏览
   当在栈上分配一个结构体数据时,如果不对其进行初始化,其中变量值是属于随机值,在一些情况下容易发生问题,尤其在flags标记这类的情况。

  一般的初始化分一下两种:
  1. struct my_struct
  2. {
  3.    int a;
  4.    int b;
  5.    int c;
  6.    int d;
  7. };

  8. struct my_struct test1;
  9. memset(&test1,0,sizeof(struct my_struct))
  10. struct my_struct test2 = {0};
复制代码
这两种方法都能保证初始化为0,但想问一下,这两种方法在效率上有没有差别,因为被告知,memset会影响性能(在性能测试比较敏感的情况下)。

谁能够给个明确的答案,谢谢啦~



@lenky0401

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
2 [报告]
发表于 2012-07-02 23:15 |只看该作者
分别对两种方式计时,每种测试百万次,看看那种快呢?

论坛徽章:
0
3 [报告]
发表于 2012-07-02 23:27 |只看该作者
用calloc可以自动初始化,但是要看calloc的实现,gnu libc应该是

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
4 [报告]
发表于 2012-07-03 14:19 |只看该作者
luoyan_xy 发表于 2012-07-02 23:07
当在栈上分配一个结构体数据时,如果不对其进行初始化,其中变量值是属于随机值,在一些情况下容易发生问 ...

如果是静态数据,memset肯定慢。
自动变量二者相同。

论坛徽章:
0
5 [报告]
发表于 2012-07-04 16:48 |只看该作者
memset多了函数调用开销

论坛徽章:
0
6 [报告]
发表于 2012-07-04 19:48 |只看该作者
只有在对象创建过程中才叫初始化,创建后那叫赋值;
就像int a=1;和int a;a=1;明显后者多了赋值的操作,所以效率肯定比初始化要低;何况还是函数调用

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
7 [报告]
发表于 2012-07-04 20:33 |只看该作者
  1. memset(&test1,1,sizeof(struct my_struct))
  2. struct my_struct test2 = {1};
复制代码
试试不为0的情况下,谁快一些呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP