我在某些项目中看到(基本上是C / C ++中的许多嵌入式应用程序),它们管理动态分配如下
问题:
Q1:上述具有私有堆管理设计的优点。
Q2:C,Linux API中是否有内置函数提供接口以在先前分配的块中进行动态分配。我搜遍了它,但无法抓住它
问题3:如果Q2中提到的选项不可用。关于第二季度提到的目标如何实现的任何想法。
答案 0 :(得分:2)
Q1:
预分配内存与后备列表的概念密切相关。
Q2:
我不知道C中的这种API,但在C ++中,实际上有内置的运算符可以帮助实现 - 请参阅Placement new。 这样的实用程序也应该很容易在C中实现。
Q3:
例如(非常高级):
答案 1 :(得分:1)
正如您所说基本上C / C ++中的许多嵌入式应用程序使用不同的方法来获取您定义的动态内存。
我认为基本上可以获得更少的内存和为了正确使用。
如果您试图了解malloc()或calloc()函数如何在c中运行以进行动态内存分配,那么您肯定会得到答案。我可以解释一下... 它(malloc)真正做的是维护一个可用内存的链表。但最初,空闲列表是空的。当调用第一个malloc()时,我们调用sbrk()来获取空闲列表的新内存块。这个内存被拆分,以便一些返回给用户,其余的返回到空闲列表。将有一个全局变量malloc_head,它是空闲列表的头部。当调用malloc()时,它会在其列表中查找足够大的内存。如果找到一个,则从链表中删除该内存并将其返回给用户。调用free()时,内存将放回链接列表中。现在,为了提高效率,如果空闲列表中有大量内存比请求的大得多,那么它会将该块分成两个块 - 一个是请求的大小(填充为多个8),其余部分。剩余部分放在空闲列表中,请求的大小返回给用户。
有关详细信息,请尝试参考http://web.eecs.utk.edu/~huangj/cs360/360/notes/Malloc2/lecture.html http://web.eecs.utk.edu/~huangj/cs360/360/notes/Malloc1/lecture.html
问题1 - > 现在,对于您的第一个问题,优势可能是节省内存和以更有效的方式分配,这取决于正在实施其方式的项目。
question2-> 我没有在c中看到任何内置库或API。
question3-> 用于自己的API的实现你需要参考给定的链接& R& K本书为C.本书详细解释了这一点。