【发布时间】:2011-11-14 02:59:21
【问题描述】:
memset() 比 for 循环更有效吗?
考虑这段代码:
char x[500];
memset(x,0,sizeof(x));
还有这个:
char x[500];
for(int i = 0 ; i < 500 ; i ++) x[i] = 0;
哪个更有效,为什么?硬件中是否有任何特殊指令可以进行块级初始化。
【问题讨论】:
-
是的。不,也许。这取决于。获得有用答案的唯一方法是在您的环境中对其进行分析和分析。在我的编译器、我的程序、我的计算机上,哪个更快,并没有告诉你任何有用的信息。
-
为什么要调查?除非有数据显示(你没有达到你的性能目标并且调查指向这部分代码),这段代码可能不是热点,你应该尽可能简单、可读和可维护的代码。
-
如果你有一个编译器不能用 memset() 代替那个循环,那么你应该找到另一个编译器。
-
@Chris: Ummmm....那时他们可能应该学习。我想我是一只 27 岁的恐龙,但我对那些不懂基本装配的所谓“工程师”有意见……我并不是说不应该使用分析器,而是对于这样一个微不足道的比较,它应该是不必要的。
-
@Chris:这就是为什么我接触到这么多网络人(和女孩)编写的应用程序比他们应该的要慢得多。不一定是因为他们不懂汇编,而是因为他们从来没有真正了解过他们使用的数据结构的性能特征,以及他们的高级代码在变成机器代码时如何执行。不过我离题了,这是另一个地点和时间的讨论。
标签: c performance memset