【问题标题】: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 吗?
  • 注意功效!=效率。
  • 一般来说,对于像这样简单的事情,编译器至少会做得和你一样好,而且通常会做得更好。

标签: c++ arrays memset


【解决方案1】:

后一种方式不是更好吗?

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


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

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

有没有性能优势

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

【讨论】:

    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2016-02-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多