Programming/C/C++2012. 8. 6. 23:03

malloc(), new()
.
.
.
시스템 콜
-> brk() - sbrk()

데이터 세그먼트의 영역을 넓혀준다. (세그먼트 끝을 연장)

 

 

- man 페이지 -

 

 

 

brk(), sbrk()의 반환형의 차이를 보면

 

 ->

 

man 페이지에도 나왔듯이 brk()는 성공시 0, 실패시 -1을 반환하고 sbrk()는 성공시 세그먼트의 break주소(마지막 경계선?)을 반환하며 실패시 -1을 반환한다.

 

 

인자값을 살펴보면

- brk()의 경우에는 brk(0x8efe000)처럼 사용해서 0x8efe000까지 할당하는 것이고

(만약 세그먼트의 break주소가 이미 0x8efe000을 넘은 경우에는 아무일도 일어나지 않는다)

 

- sbrk()이 경우에는 sbrk(0x1000)처럼 사용해서 이전 세그먼트에서 + 0x1000만큼 해주는 것이다.

 

 

데이터 세그먼트의 최하위 주소를 얻을때는 sbrk(0)을 호출해서 얻는다 .

 

 

malloc(1000)을 해도 brk() 시스템 콜이 사용됩니다. ()

// sbrk(1000)은 경우에는 정확히 1000을 할당할텐데 malloc(1000)으로 하면 좀더 많은 메모리를 반환해서 나중에 다시 brk호출 되는 경우는 방지해서 시스템 성능을 향상 -

 

 

'Programming > C/C++' 카테고리의 다른 글

Unix 입출력 [ read/write - recv/send ]  (0) 2012.11.30
함수 포인터 사용  (0) 2012.09.23
sbrk(), brk() 함수  (0) 2012.08.06
c언어 - 확장 유클리드 알고리즘  (1) 2012.05.26
c언어 - 유클리드 알고리즘  (0) 2012.05.26
system()과 execl()의 차이  (0) 2012.05.16
Posted by bbolmin

댓글을 달아 주세요