0

因此,据我所知, malloc 返回指向堆中某个位置的指针。

sbrk() 将堆扩展至少 4k

如果由于某种原因我不能使用 malloc,如果链表(例如)通过使用 sbrk() 调用获得的具有 4k 的地址,是否可以在 c 中为新成员分配内存,而不是一个malloc?

对不起,如果这是一个 dmub 问题:(

编辑:我不能使用 malloc 的原因是因为我的任务是创建自己的 malloc 并被告知使用 sbrk。

4

2 回答 2

2

brksbrk已从 POSIX 中删除;它们不是便携式的。一些malloc实现使用sbrk,但不一定期望应用程序代码移动中断地址,因此使用sbrk可以中断malloc。即使您的代码不使用malloc,您也可能无法摆脱 Break malloc,因为您的进程中的其他一些代码可能正在调用它。

相对于现代 POSIX 环境,为了更直接地从操作系统内核获取页面内存malloc,更好的选择是mmap函数(带有MAP_ANONMAP_PRIVATE标志)。

于 2019-11-01T20:54:53.393 回答
0

brk并且sbrk是分配堆内存而不是使用 malloc 的替代(不推荐)方式。一般来说,你不应该在使用 malloc 的程序中使用它们,但是如果你的程序从不使用 malloc(并且从不使用任何使用 malloc 的 stdlib 函数,例如 stdio),你可以使用它们来管理堆。

sbrk可以用来malloc分配一些额外的堆空间(由其参数指定的数量)。 brk可以free像. _ _sbrk

于 2019-11-01T21:09:21.013 回答