2011-07-13 152 views
2

以下哪个代码最适合初始化数组?最佳初始化代码

char szCommand[2048] ={0} 

char szCommand[2048]; 
memset(szCommand,0,2048); 
+0

只需在字符串末尾加上''\ 0'' –

+1

看到这个几乎相同的问题http://stackoverflow.com/q/1998752/57428 – sharptooth

+1

@maanu,你需要多少性能好处? – Donotalo

回答

2

对于空终止字符串,在我看来,最佳的初始化这个

szCommand[0] = 0; 
+1

不是最优目的? – ybungalobill

+0

@ybungalobill,是的。我发布了另一种方式,OP可能会发现它确定。 –

+2

关于将一个字节与2048字节设置为零之间的差异没有任何“目标”。如果这是一个字符串,则一个字节就足够了。 –

2

任何像样的编译器应该发出两种情况下相同的代码。在memset的情况下,编译器可以通过理解标准库中函数的语义来消除函数调用。

+0

但是,某些编译器将memset实现为内部函数,而且情况正好相反,编译器会将第一个代码示例替换为第二个代码示例。无论如何,这两种情况下都必须清除内存。 –

5

第二个不是初始化数组,它更像是赋值给它。我认为如果以后会有什么明显的区别(不会有),你必须亲自分析它,并且看到第一个版本可能会更快一点 - 但这只是在优化结束时。 过早的优化是所有罪恶的根源 - 只是DON“T想想

+0

+1对'tiiiiiny'。 :P – Donotalo

3

两个版本之间的性能差别是如此微不足道(如果编译器不优化掉的区别),我” ð倾向于最可读的一个去。

0

两者都是一样的,第一个版本是紧凑 - 而已。