微控制器内存分配

我一直想着以下问题:

在一个普通的PC中,当你分配一些内存时,你要求操作系统跟踪哪些内存段被占用,哪些内存不被占用,并且不要让你搞乱其他程序内存等等。但是微控制器,我的意思是微控制器没有运行的操作系统所以当你要求一堆内存发生了什么? 你不能简单地访问内存芯片并随机访问它因为它可能被占用…谁跟踪内存的哪些部分已被占用,并为你提供一个免费的存储位置?

编辑:

我用C语言编写了微控制器…我认为答案可能是“语言无关”。 但是让我更清楚一点:我想让这个程序在微控制器上运行:

int i=0; int d=3; 

是什么让我的i和d变量不存储在内存中的同一个地方?

我认为这些评论已经涵盖了这个……

要求内存意味着你有一些操作系统正在管理你正在进行操作的内存(使用松散的术语操作系统)。 首先,你不应该把微控制器中的内存作为一般规则(我可能会因为该声明而受到抨击)。 可以在案件中完成,但是您可以控制自己的记忆,使用您的应用程序拥有系统,要求记忆意味着要求自己。

除非你有理由为什么你不能静态地分配你的结构或数组或使用联合如果存在可能同时需要大量或全部备用内存的互斥代码路径,你可以尝试动态分配,但它是一个更难的系统解决工程问题。

运行时分配内存和编译时间之间存在差异。 你的例子与其余问题无关

int i = 0; int d = 3;

编译时编译器为.data中的每个项分配两个位置。 链接器和/或脚本管理.data所在的位置以及它在大小上的限制,如果.data大于可用的,你应该获得链接器警告,如果没有,那么你需要修复你的链接器命令或脚本以匹配你的系统。

运行时分配是在运行时管理的,它管理内存的位置和方式由该库决定,即使你有足够的内存,一个坏的或不正确编写的库可能会重叠.text,.data,.bss和/或堆栈和原因很多问题。

过度使用堆栈也是一个非常严重的系统工程问题,来自非嵌入式系统的这些日子往往被忽视,因为有太多的内存。 在微控制器上处理嵌入式代码时,这是一个非常现实的问题。 您需要知道最坏情况下的堆栈使用情况,如果要有动态分配的堆,或者即使您静态分配,也至少为这么多内存留出空间。