微控制器内存分配

时间:2013-02-19 18:41:47

标签: c memory-management microcontroller

我一直在考虑以下问题:

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

修改

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

int i=0;
int d=3;

是什么确保我的i和d变量不存储在内存中的同一位置?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

int i = 0; int d = 3;

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

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

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