gpt4 book ai didi

c - 局部变量和静态变量

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:03 25 4
gpt4 key购买 nike

我只是想了解 RAM 分配的差异。

为什么如果我在函数之前定义一个变量,我会发生 RAM 溢出,而当我在函数内部定义它时却没问题?

例如:

/*RAM OK*/
void Record(int16_t* current, int i,int n)
{
float Arr[NLOG2] = {0};
for(i=0;i<n;i++)
Arr[i]=current[i*5];
}

/*RAM OVERFLOW*/
static float Arr[NLOG2] = {0};

void Record(int16_t* current, int i,int n)
{
for(i=0;i<n;i++)
Arr[i]=current[i*5];
}

这是消息:

unable to allocate space for sections/blocks with a total estimated minimum size of 0x330b bytes (max align 0x8) in <[0x200000c8-0x200031ff]> (total uncommitted space 0x2f38).

最佳答案

不同的是,第一种情况,Arr声明在栈上;在调用该函数之前,该数组不存在。生成的二进制文件包含用于创建数组的代码,但数组本身不在二进制文件中。

然而,在第二种情况下,Arr 是在任何函数之外声明的(也就是在文件范围内)。因此,它始终 存在,并存储在二进制文件中。因为您似乎是在嵌入式平台上工作,所以这种微不足道的差异会导致您的“RAM 溢出”错误。

关于c - 局部变量和静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310730/

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