没有操作系统的嵌入式系统中的malloc

Leo*_*ssi 9 c embedded memory-management

此查询涉及使用的内存分配malloc.

通常我们所说的是malloc从堆中分配内存.

现在说我有一个普通的嵌入式系统(没有操作系统),我在我的程序中加载了正常的malloc程序.

在这种情况下,从哪里分配内存?

Ber*_*ann 9

malloc()是一个通常由运行时库实现的函数.你是对的,如果你在操作系统上运行,那么malloc有时会(但不是每次都)触发一个系统调用,使OS将一些内存映射到你程序的地址空间.

如果你的程序没有一个操作系统上运行,那么你可以把你的程序是操作系统.您可以访问所有地址,这意味着您只需为指针分配一个地址,然后将该指针取消引用即可读/写.

当然,你必须确保程序的其他部分不是只使用相同的内存,所以你要编写自己的内存管理器:

简而言之,您可以预留一系列地址,"内存管理器"使用这些地址来存储已经使用的地址范围(存储在其中的数据结构可以像链表一样简单,也可以复杂得多).然后你将编写一个函数并调用它,例如malloc(),它构成了你的内存管理器的功能部分.它查看提到的数据结构,以查找范围的地址,只要参数指定并返回指向它的指针.

现在,如果程序中的每个函数都调用malloc()而不是随机写入自定义地址,那么您已经完成了第一步.您可以编写一个free()函数,它将查找在上述数据结构中给出的指针,并调整数据结构(在天然链表中它将合并两个链接).

  • @fanl你的问题与里奥·梅西的问题不同。您对这个答案 -1 了吗?请撤消。如果您提出自己的问题,我会尽力回答。 (2认同)

jke*_*ian 5

唯一真正的答案是"编译器/库实现放置它的位置".

在我使用的嵌入式系统中,没有堆,因为我们没有写过.