brk 시스템 콜은 대표적으로 malloc 함수로 메모리 할당을 요청할 때 사용되는 시스템 콜로 볼 수 있다.
malloc에서는 실제 메로리를 할당받기 위해서 brk 또는 mmap 시스템 콜을 사용하게 된다.
#include <unistd.h>
int brk(void *addr);
void* sbrk(intptr_t increment);
brk, sbrk 는 힙의 크기를 변경한다.
힙은 Uninitialized된 데이터 영역 직후에 시작해서 위쪽으로 메모리 주소가 커지는 영역이다.
brk, sbrk는 현재 프로세스의 program break(힙의 꼭대기를 가리키는 변수)의 위치를 변경하는 함수이다.
(heap 영역의 요청이 없을 때 까지는 Data Segment = Program Break이다.)
brk와 sbrk 함수를 사용하여 힙의 크기를 조정 할 수 있다.
brk() 는 해당 값이 합리적이고, 시스템에 메모리가 충분할 때 program break를 brk의 인자인 addr에서 지정한 값으로 설정한다.
그리고 프로세스는 최대 데이터 크기를 초과하지 않는다.
sbrk() 는 program break를 increment bytes만큼 증가시킨다. increment 인자를 0으로 설정하여 sbrk()를 호출하는 것은 현재 program break의 위치를 찾을 때 쓰인다.
두 함수의 차이점은 program break를 설정하는가와 증가시키냐의 차이다.
또한 sbrk()함수에 increment의 인자를 0으로 설정한 후 호출하게되면 현재 program break의 위치를 void* 형 포인터로 반환함을 알 수 있다.
글을 잘쓰시네용 잘보고갑니다