C Keil 编译器使用 malloc 作为局部变量,为什么?

Ali*_*za 4 c malloc heap-memory c99 keil

我在我想声明一个数组的函数中的代码中的某个地方遇到了问题,但它失败了。经过一些调试后,我发现它在反汇编窗口中使用了 malloc,所以我增加了堆大小并且它工作正常!

所以我的问题是为什么 keil 使用堆作为局部变量?

这是变量声明代码:

uint8_t result[data->capacityBytes];
memset(result, 0, sizeof(result));
Run Code Online (Sandbox Code Playgroud)

我添加了标志 C99

Mat*_*Mat 6

您的数组具有动态大小,即编译器直到运行时才知道它有多大。这是 C99 中引入的称为可变长度数组 (VLA) 的功能。

根据 Keil 的文档(请参阅注释),此类数组由此编译器在堆上分配。(其他人可能会在堆栈上分配。其他人可能根本没有实现这个特性——它在 C11 中成为可选的。)