我有一个抽象的“x vs y”问题。在 C 编程语言中,如果我有一些少量的数据想要存储在 RAM 中的某个位置,我想典型的选项是下一个:
malloc()
static
alloca()
关键字和
static
非标准函数有什么区别?
alloca()
那样声明它。其行为取决于此类声明出现的位置。
我。如果它在函数内部,那就是我们所说的本地/自动 多变的。这很可能会分配在堆栈上(如果是 没有被编译器优化掉)。ii.如果它出现在文件范围内,那么它将是一个全局变量,很可能会在全局内存中分配。
这些分配都不“慢”(如果将其与堆分配成本进行比较)
int x;
。这总是在堆上分配内存并返回指向已分配内存的指针。根据您的定义方式,这可能会很慢,因为调用
malloc
会执行计算出堆上分配的空间的代码。以这种方式分配的内存必须通过在同一指针上调用 malloc
来释放。
free
关键字。
static
与堆栈无关。当 static
出现在函数内部时,类似于将变量设为全局变量,并将驻留在全局内存中。在文件范围内使用 static
也会生成变量,但只能从同一个文件访问它(与全局变量相反,全局变量只要有声明就可以从其他文件访问)。
static
。调用
alloca
与在 API 中调用 alloca
类似,但会在堆栈上为您分配空间。这个记忆永远不应该是手动的 malloc
'd。