我想在函数中的代码中某个地方声明一个数组,但是它失败了。经过一些调试后,我发现它在反汇编窗口中使用了malloc,因此我增加了堆大小,并且可以正常工作!
所以我的问题是为什么keil使用Heap作为局部变量?
这是变量声明代码:
uint8_t result[data->capacityBytes];
memset(result, 0, sizeof(result));
我添加了标志C99
您的数组具有动态大小,即,编译器直到运行时才知道它的大小。这是C99中引入的称为可变长度数组(VLA)的功能。
根据Keil的文档(请参阅注释),此类数组由该编译器分配在堆上。(其他人可能在堆栈上分配。其他人可能根本没有实现此功能-在C11中成为可选功能。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句