gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:44:17 26 4
gpt4 key购买 nike

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

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

这是变量声明代码:

uint8_t result[data->capacityBytes];
memset(result, 0, sizeof(result));

我添加了标志 C99

最佳答案

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

根据 Keil 的 documentation (见注),这样的数组是由这个编译器在堆上分配的。 (其他人可能会在堆栈上分配。其他人可能根本没有实现这个特性——它在 C11 中成为可选的。)

关于C Keil 编译器使用 malloc 作为局部变量,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60483603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com