使用 memset 初始化整数数组而不是像 array[10]=0 这样的默认零初始化是不是有任何性能优势?

Posted

技术标签:

【中文标题】使用 memset 初始化整数数组而不是像 array[10]=0 这样的默认零初始化是不是有任何性能优势?【英文标题】:Is there any performance advantage of initialising an integer array with memset instead of default zero initialisation like array[10]=0?使用 memset 初始化整数数组而不是像 array[10]=0 这样的默认零初始化是否有任何性能优势? 【发布时间】:2021-03-23 14:43:38 【问题描述】:

鉴于 memset 只能用于初始化值为 0 或 -1 的整数数组,您使用它进行零初始化的原因是什么。它的功效仅仅在于字符串初始化吗?

array[10];
memset(array,0,sizeof(array)); 

array[10]=0;

后一种方式不是更好吗?

【问题讨论】:

定义“总是”。事后可以做第二种形式吗? 如果这是针对 C 字符串的,你最好使用std::string 而不必担心这个。 memset 只能使用值 0 或 -1 吗? 注意功效!=效率。 一般来说,对于像这样简单的事情,编译器至少会做得和你一样好,而且通常会做得更好。 【参考方案1】:

后一种方式不是更好吗?

代码清晰,除非有其他原因。


array[10] = 0; 清晰干净,但不是后续调零的解决方案。

memset(array, 0, sizeof array); 可以在 array 的整个生命周期内多次执行。 memset() 并不是真正初始化,而是赋值

有没有性能优势

无论哪种方式,一个好的编译器都会生成高效的代码。如果存在性能优势,则可能表明编译器较弱。

【讨论】:

以上是关于使用 memset 初始化整数数组而不是像 array[10]=0 这样的默认零初始化是不是有任何性能优势?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我可以从 初始化常规数组,而不是 std::array

从Twig设置数组元素

在 PHP 中初始化(空)数组的最佳方法

php数组

在 nlog(n) 时间内对整数数组进行排序而不使用比较运算符

POJ-3061