c函数:重新初始化一个静态数组还是声明每个调用新的?

时间:2017-12-14 09:51:01

标签: c arrays static

我想知道如果我想在函数中使用零初始化的n个unsigned char元素数组,最好的方法是什么。 n是约。 600.

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

unsigned char buffer[n] = {0};

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

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

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

1 个答案:

答案 0 :(得分:1)

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

此外,static变量不是线程安全的,这可能是也可能不是问题。

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