brk sbrk , - . Mac OS X (, , BSD-) / , Linux , :
#include <unistd.h>
#include <stdio.h>
int main() {
void *p;
p = sbrk(0);
printf("Initial brk: %p\n", p);
p = sbrk(1);
p = sbrk(0);
printf("New brk: %p\n", p);
return 0;
}
:
Initial brk: 0x602000
New brk: 0x602001
. man- Linux :
brk() sbrk() , ( ). ; .
BSS. - , , , .
, , modulo ( getpagesize).
:. . man- , brk sbrk sys_brk. mm/mmap.c ( mm/nommu.c , ). brk mm/mmap.c :
newbrk = PAGE_ALIGN(brk);
( "brk" , .) , ... : , , , , brk, - :
mm->brk = brk;
, , . 3.17.5 2.4.37, .
fs/binfmt_elf.c ( ELF) set_brk, "brk" (mm->start_brk). . fs/binfmt_aout.c, a.out fs/binfmt_som.c, SOM HP-UX ( ). fs/binfmt_flat.c, brk, ; . , , . , ELF, "" .
Glibc sys_brk sbrk. , glibc brk - , sys_brk __curbrk, sbrk .