我通常可以毫无疑问地确定某些数据是全局的,静态的还是在堆栈上(这里没有动态分配,因此不使用堆)。我也看过几个Q / A如这一个,但我的问题是更具体的,因为它涉及到比较系统内存中的数据,庞大的数额巨大。
我正在尝试改进的现有代码(设计,可能出现的问题,性能等)。该代码在只有4KB RAM的旧8位MCU上运行。在这段代码中,我将使用几乎1KB的数组(是的,在4KB RAM系统上为1KB)。使用此数组的每个字节,这不是问题。问题在于此数组是文件在其中声明的静态数组,因此其生命周期与程序之一相同(即可以视为无限)。
但是,在阅读了代码之后,我才发现该数组不需要无限的生命周期,它是以完全过程性的方式构建和处理的,因此我们应该只能在使用它的函数中声明它,这样,它将在堆栈上,因此我们将节省此1KB RAM。
现在的问题是:这是个好主意吗?从设计的角度来看,如果不需要无限/全局生命周期,则它属于堆栈。但是,嘿,这是4KB中的1KB,这样分配25%的RAM是否没有任何缺点?(可能是堆栈的50%或更多)
有人可以在这种情况下分享经验吗,还是有人在考虑是否有任何合理的理由不将此数组放在堆栈中?我正在寻找技术缺陷以及对设计的评论。
我唯一意识到的是,进入此功能时,我必须确保实际上有1KB的可用堆栈。也许这就是我必须采取的所有措施,也许不是。