代码之家  ›  专栏  ›  技术社区  ›  Stefatronik

c函数:重新初始化静态数组或声明新的每次调用?

  •  0
  • Stefatronik  · 技术社区  · 7 年前

    我想知道如果我想在一个函数中使用由n个无符号字符元素组成的零初始化数组,最好的方法是什么。n约为600。

    a) 在每次函数调用时新声明数组:

    unsigned char buffer[n] = {0};
    

    b) 声明为静态,但memset每个函数调用:

    static unsigned char buffer[n] = {0};
    memset (buffer, 0, n);
    

    我希望(a)中的memset和初始化成本是一样的。但对于(a),我需要为每个funktion调用分配内存,并在离开函数时释放内存。在(b)中不会发生这种情况,因为数组被声明为静态的。 我说得对吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Lundin    7 年前

    保留它 static 意味着它在启动时初始化为零,这对您没有好处,因为您在运行时将其设置为零。如果在运行时执行特定于系统的静态初始化,这将意味着程序启动速度较慢。

    而且 静止的 变量不是线程安全的,这可能是问题,也可能不是问题。

    在堆栈分配的情况下,需要时间的不是分配,而是零输出。因此,如果您关心性能,最好的解决方案是根本不要对其进行零初始化,而是确保算法写入数组的每个字节。我不知道这里的算法,但“我必须有一个大小为600的全零局部数组”是一个奇怪的要求。