我在某些项目中看到(基本上是C / C ++中的许多embedded式应用程序),他们在这里pipe理dynamic分配
问题:
Q1:上面提到的具有私人堆pipe理的devise的优点。
Q2:C,Linux API中是否有内置的函数提供了在先前分配的块中进行dynamic分配的接口。 我通过search,但无法抓住它
问题3:如果Q2中提到的选项不可用。 关于第二季度提到的目标如何实现的任何想法。
Q1:
预先分配的内存与旁视列表的概念密切相关。
Q2:
我不知道在C这样的API,但在C + +有实际的内置操作符,可以协助实施 – 请参阅放置新 。 这样的效用在C中也应该相当容易实现。
Q3:
例如(非常高级):
正如你所说, 基本上C / C ++中的许多嵌入式应用程序使用不同的方法来获得您定义的动态内存。
我认为这是基本上可用性较少的内存和适当的使用。
如果你想知道malloc()或calloc()函数如何在c中动态分配内存,那么你肯定会得到答案。 我可以解释一个小的bt … 它是什么(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 – >现在对于你的第一个问题,好处可能是以更有效的方式节省内存和分配,这取决于正在实施他们的方式的项目。
问题2 – >我没有看到任何内置库或API在C这样做。
question3->为了实现你自己的API,你需要参考给定的链接和R&K书为C.本书解释得更详细。