据我所知,函数brk(),sbrk()用于重新分配内存,但是它们与realloc()函数有何不同?
最佳答案
brk
和sbrk
是系统调用(在内核中实现),而malloc
,free
和realloc
是用户空间中的库函数。因此,malloc
等函数在内部使用brk
和sbrk
但提供了其他功能(有关brk
的更多详细信息,请参见man(2);有关malloc
的更多详细信息,请参见man(3)。)brk
通过向内核提供指向程序可能使用的最大虚拟内存位置的指针,仅告诉内核程序要使用多少内存。但是,您只有一整块内存。malloc
可帮助您将巨大的内存块 segmentation 为较小的部分。
示例代码在这里没有多大意义,因为brk
和malloc
在不同的级别上工作。但是您可能会想到如何实现malloc
和free
的非常简单(且不是线程安全的)版本,以及在那里使用brk
的位置:
brk
以增加我们从内核正如@BasileStarynkevitch在他的评论中所述,作为
brk
的替代品,您还可以使用mmap
(带有fd=-1
和flags=MAP_PRIVATE|MAP_ANONYMOUS
)来保留由交换文件支持的单个内存块。有关mmap的详细信息,请参见man(2)。