我想知道如果我想在函数中使用零初始化的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)中,因为数组被声明为静态的。 我对吗?
答案 0 :(得分:1)
保持static
意味着它在启动时被初始化为零,因为你在运行时将它设置为零,这对你没有好处。如果在运行时执行特定于系统的静态初始化,则意味着启动程序启动较慢。
此外,static
变量不是线程安全的,这可能是也可能不是问题。
堆栈分配情况需要时间,不是分配,而是零输出。因此,如果您关注性能,最好的解决方案是根本不对其进行零初始化,而是确保算法写入数组的每个字节。我不知道这里的算法,但“我必须有一个大小为600的所有零的本地数组”是一个奇怪的要求。