c函数: re-initialize a static array or declare new every call?

标签 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);

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

最佳答案

保持它静态意味着它在启动时被初始化为零,这对你没有好处,因为无论如何你在运行时将它设置为零。如果系统特定的静态初始化是在运行时执行的,这将意味着程序启动速度会变慢。

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

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

关于c函数: re-initialize a static array or declare new every call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47810351/

相关文章:

c - 如果未定义则跳过函数调用

java - 简单数组的问题

Java 认为一个方法是静态的?

c - Raspberry Pi - 通过 PCF8574 IOExpander 连接基于 HD44780 的 20x4 LCD

c - 代码块中的警告, "operation may be undefined"

javascript - 下划线 sortBy、groupBy 以及分组数组的数量

c - 在c中反转字符串数组的两种不同方法

c++ - 在实例之间的类成员函数内分离静态变量

Python ctypes - 在头文件中调用静态内联函数?

c - 段错误(核心转储)代码块