[SW사관학교 정글]40일차 TIL

김승덕·2022년 10월 28일
0

SW사관학교 정글 5기

목록 보기
80/150
post-thumbnail

요즘 문득문득 그런 생각이 든다.
"내가 잘하고 있는게 맞을까...?"
지금까지는 아닌거같다...

그래서 나로서는 정말 큰 결심을 했다.
내가 배운 내용을 글로 적는것을 줄이려고 한다.
그리고 중요한 부분들, 정리하면 좋을것같은 것들은 따로 시간을 내어서 블로그에 포스팅하려고 할것이다.

매일 하루하루에 대한 배운 내용을 간단히 작성하려고 한다... ㅎㅎ

오늘부터 시작 🐸

malloc 만들기

malloc 즉, 동적 메모리 할당은 런타임 때 추가적인 가상 메모리를 얻는것을 말한다.
이번주는 직접 malloc을 만드는 과정이다.

brk()와 sbrk()

brk()와 sbrk()는 모두 동적 메모리 할당기이다
세그먼트 끝을 연장해준다.

brk()

  • brk()의 경우에는 인자로 주소를 넣어주면 그 주소까지 메모리가 할당되는것이다.
  • 반환값 : 성공한 경우 0, 실패한 경우 -1을 반환한다.

sbrk()

  • sbrk()는 인자로 길이가 들어가고 이전 세그먼트에서 시작해서 인자로 들어온 길이만큼 메모리가 할당된다.
  • 반환 값 : 성공시 세그먼트의 break 주소, 즉 시작 주소가 나온다.(끝 주소가 아니라는것임을 주의해야한다.)
  • 데이터 세그먼트의 최하위 주소를 얻을때는 sbrk(0)을 호출해서 얻는다.

단편화

가용메모리가 할당 요청을 만족시키기에는 가용하지 않았을때 단편화가 일어난다.
즉 메모리 공간을 효율적이지 못하게 사용하는 경우를 단편화가 일어났다고 한다.

내부 단편화

  • 할당된 블록이 데이터 자체보다 클때 일어남

외부 단편화

  • 할당 요청을 만족시킬 수 있는 메모리 공간이 전체적으로 공간을 모았을 때는 충분한 크기가 존재하지만, 이 요청을 처리할 수 있는 단일한 가용 블록은 없는 경우

묵시적 가용 리스트를 사용해서 힙 구성

  • 블록 크기는 항상 8의 배수이고 블록 크기의 하위 3비트는 항상 0이다.
  • 하위 3비트가 항상 0인 이유 : 하위 4비트에서 처음에 비트에는 블록의 길이에 대한 정보가 들어간다. 그런데 블록의 크기는 항상 8의 배수이므로 이진수로 본다면 세번째 자리부터는 0이된다.
  • 이 빈 공간을 활용을 해준다. 어떻게? 이 블록이 활용되었는지 안되었는지를 알려주는 정보가 들어간다.

가용 블록의 분할

할당기가 크기가 맞는 가용 블록을 찾은 후에 가용 블록이 어느 정도를 할당할지에 대해 정책적 결정을 내려야 한다.
이때 가용 블록 전체를 사용하거나, 두개로 나누는 경우가 있다.
가용 블록 전체를 사용하면 내부 단편화가 일어나므로, 보통 두 개로 나누는 정책을 쓴다.
하지만 이 분할은 오류 단편화라는 현상을 유발시킨다.

참고 자료

sbrk(), brk() 함수
컴퓨터 시스템 책

🙋‍♂️ 오늘의 TMI

페이스가 점점 좋아지고 있다 🏃🏻🏃‍♂️
이렇게 점점 좋아지니까 좋다 ㅎㅎ

profile
오히려 좋아 😎

0개의 댓글