BRK - Linux手册页
Linux程序员手册 第2部分
更新日期: 2016-03-15
名称
brk,sbrk-更改数据段大小
语法
#包括
int brk(void * addr);
无效* sbrk(intptr_t增量);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
brk(),sbrk():
- Since glibc 2.19:
_DEFAULT_SOURCE || (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200112L)
- From glibc 2.12 to 2.19:
_BSD_SOURCE || _SVID_SOURCE || (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200112L)
- Before glibc 2.12:
- _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE>= 500
说明
brk()和sbrk()更改程序中断的位置,该位置定义了进程数据段的结尾(即,程序中断是未初始化数据段结束之后的第一个位置)。增加程序中断的作用是为进程分配内存。减少中断会释放内存。
brk()将数据段的末尾设置为addr指定的值,当该值合理时,系统具有足够的内存,并且进程未超过其最大数据大小(请参阅setrlimit(2))。
sbrk()通过增加字节来增加程序的数据空间。以0增量调用sbrk()可用于查找程序中断的当前位置。
返回值
成功时,brk()返回零。错误时,返回-1,并将errno设置为ENOMEM。
成功时,sbrk()返回上一个程序中断。 (如果增加了中断,则此值是指向新分配的内存的起点的指针)。出错时,返回(void *)-1,并且errno设置为ENOMEM。
遵循规范
4.3BSD; SUSv1(在SUSv2中标记为LEGACY)已在POSIX.1-2001中删除。
备注
避免使用brk()和sbrk():malloc(3)内存分配包是可移植且舒适的内存分配方式。
各种系统对sbrk()的参数使用各种类型。常见的是int,ssize_t,ptrdiff_t,intptr_t。
C library/kernel differences
上面为brk()描述的返回值是glibc包装函数为Linux brk()系统调用提供的行为。 (在大多数其他实现中,brk()的返回值是相同的;该返回值也在SUSv2中指定。)但是,实际的Linux系统调用成功返回新程序中断。失败时,系统调用将返回当前中断。 glibc包装函数完成了一些工作(即检查新的中断是否小于addr)以提供上述的0和-1返回值。
在Linux上,sbrk()被实现为使用brk()系统调用的库函数,并进行了一些内部记账,以便它可以返回旧的break值。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。