用brk来获取brk_start

时间:2013-01-13 19:39:59

标签: posix init sbrk brk

int brk手册(void * end_data_segment);说:“brk()将数据段的结尾设置为end_data_segment指定的值”

在成功时,它返回0,否则为-1。

但是我如何获得休息的初始值(比如sbrk(0))?

最好的问候,

1 个答案:

答案 0 :(得分:0)

正如手册所述:

  

成功时,brk()返回零。出错时,返回-1,并将errno设置为ENOMEM

因此无法通过调用brk来获取初始值。相反,正如您所注意到的,您应该使用sbrk(0)

  

sbrk()按递增字节递增程序的数据空间。打电话给sbrk()          增量为0可用于查找程序的当前位置          断裂。

brk已经提供此功能时,没有理由期望sbrk(0)也提供此功能。有了这个说法,由于brk / sbrk的某些操作系统的限制,一般情况下使用mmap来满足您的内存分配需求可能更为谨慎。