使用 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 这样的默认零初始化是不是有任何性能优势?的主要内容,如果未能解决你的问题,请参考以下文章