因此,据我所知, malloc 返回指向堆中某个位置的指针。
sbrk() 将堆扩展至少 4k
如果由于某种原因我不能使用 malloc,如果链表(例如)通过使用 sbrk() 调用获得的具有 4k 的地址,是否可以在 c 中为新成员分配内存,而不是一个malloc?
对不起,如果这是一个 dmub 问题:(
编辑:我不能使用 malloc 的原因是因为我的任务是创建自己的 malloc 并被告知使用 sbrk。
因此,据我所知, malloc 返回指向堆中某个位置的指针。
sbrk() 将堆扩展至少 4k
如果由于某种原因我不能使用 malloc,如果链表(例如)通过使用 sbrk() 调用获得的具有 4k 的地址,是否可以在 c 中为新成员分配内存,而不是一个malloc?
对不起,如果这是一个 dmub 问题:(
编辑:我不能使用 malloc 的原因是因为我的任务是创建自己的 malloc 并被告知使用 sbrk。
brk
并sbrk
已从 POSIX 中删除;它们不是便携式的。一些malloc
实现使用sbrk
,但不一定期望应用程序代码移动中断地址,因此使用sbrk
可以中断malloc
。即使您的代码不使用malloc
,您也可能无法摆脱 Break malloc
,因为您的进程中的其他一些代码可能正在调用它。
相对于现代 POSIX 环境,为了更直接地从操作系统内核获取页面内存malloc
,更好的选择是mmap
函数(带有MAP_ANON
和MAP_PRIVATE
标志)。
brk
并且sbrk
是分配堆内存而不是使用 malloc 的替代(不推荐)方式。一般来说,你不应该在使用 malloc 的程序中使用它们,但是如果你的程序从不使用 malloc(并且从不使用任何使用 malloc 的 stdlib 函数,例如 stdio),你可以使用它们来管理堆。
sbrk
可以用来malloc
分配一些额外的堆空间(由其参数指定的数量)。 brk
可以free
像. _ _sbrk