sbrk 예제

sbrk(0)를 사용하면 현재 “break” 주소가 표시됩니다. brk() 및 sbrk()는 프로세스의 데이터 세그먼트의 끝을 정의하는 프로그램 중단의 위치를 변경합니다(즉, 프로그램 중단은 초기화되지 않은 데이터 세그먼트가 끝난 후 첫 번째 위치). 프로그램 중단을 늘리면 프로세스에 메모리를 할당하는 효과가 있습니다. 브레이크를 줄이면 메모리가 할당됩니다. sbrk는 POSIX에 따라 “레거시”인터페이스입니다 : 즉, 새로운 프로그램에서 피해야한다. 또한 XA 또는 ESA 운영 체제에서 sbrk가 할당한 메모리는 31비트 주소 지정 모드에서 실행되는 프로그램의 경우 16MB 라인 위에 있습니다. 프로그램이 malloc에게 공간을 요청하면 malloc은 sbrk에게 힙 크기를 증가하도록 요청하고 힙에서 새 영역의 시작 부분에 대한 포인터를 반환합니다. 이것은 기술적으로 누락되었습니다. sbrk의 현재 Mac OS X 구현은 에뮬레이션이며 최대 할당은 4메가바이트입니다. [4] 이 제한에 도달하면 -1이 반환되고 errno가 ENOMEM으로 설정됩니다. brk 및 sbrk는 프로세스의 데이터 세그먼트에 할당된 메모리 양을 제어하기 위해 유닉스 및 유닉스와 같은 운영 체제에서 사용되는 기본 메모리 관리 시스템 호출입니다. [1] 이러한 함수는 일반적으로 malloc와 같은 상위 수준의 메모리 관리 라이브러리 함수에서 호출됩니다.

원래 유닉스 시스템에서 brk와 sbrk는 응용 프로그램이 추가 데이터 공간을 확보할 수 있는 유일한 방법이었습니다. 이후 버전에서도 mmap 호출을 사용하여 이 작업을 수행할 수 있었습니다. [2] 성공적으로 완료되면 brk 서브루틴은 0값을 반환하고 sbrk 서브루틴은 프로그램 나누기의 이전 값을 반환합니다(사용 가능한 공간이 증가하면 이 이전 값도 새 영역의 시작을 가리킵니다). 서브루틴 중 하나가 실패하면 -1 값이 반환되고 errno 전역 변수가 오류를 나타내도록 설정됩니다. Linux에서 sbrk()는 brk() 시스템 호출을 사용하는 라이브러리 함수로 구현되며 이전 break 값을 반환할 수 있도록 일부 내부 부기 기능을 수행합니다. sbrk() 및 brk()를 사용하여 C 프로그램에서 프로그램 중단을 이동할 수 있습니다. 중단 값은 할당되지 않은 메모리의 첫 번째 바이트의 주소입니다. 프로그램이 실행을 시작하면 중단 값이 코드 다음에 배치되고 프로그램의 상수 데이터가 표시됩니다. 메모리가 할당되면 할당 요청을 충족할 수 있을 만큼 큰 사용 가능한 블록이 없을 때 이 포인터가 진행됩니다.

sbrk() 함수는 현재 중단 값에 증분 값을 추가하여 프로그램에 대한 새 중단 값을 설정합니다.