C언어의 free() 함수는 어떻게 자기가 해제해야할 메모리의 크기를 아는가?

sim51177의 이미지

예를 들어

int *ptr = (int *)malloc(sizeof(int)*10);
과 같이 동정 할당했다면

상식적으로도 해제할때는
free(ptr, sizeof(int)*10);

과 같이 해야 하는게 정상 아닌가 생각됩니다.
하지만 실제로는 포인터 하나만을 인수로 필요로 하죠.

어떻게 포인터만 넘겨주면 할당된 양을 모두 해제 할수 있는건가요?

쌀밥의 이미지

malloc 할때에 메모리의 앞부분에 추가 정보를 더하도록 되어있습니다.

그래서, 예를 드러

malloc(4) 라고 하면 4byte 메모리가 할당될것 같지만
실제로는 4+alpha 만큼의 메모리가 할당되고

앞부분의 alpha 값 만큼의 공간에, '뒷쪽으로 몇바이트가 할당되어있습니다' 라는 추가 정보를 기록해둡니다.

free 할때에는 이 정보를 사용하는 것이지요.

이 문제 때문에

작은 사이즈의 메모리를 여러번 할당 받으려고 하면

배보다 배꼽이 커지는 상황이 발생합니다.

예를 들어, 1byte를 100번 할당 받으면

alpha 에 해당하는 공간이 원래 사용하려는 공간 보다 더 커질 수도 있는 것이죠.

메모리가 부족한 시스템에서는 이 문제를 해결하기 위해

특별히 메모리 관리자를 두게 됩니다.

Loki 라이브러리의 SmallObject가 그런 거구요

Boot 라이브러리에도 메모리 관리자가 있습니다. 참고하세요...

일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.

r0x2tk1t의 이미지

쌀밥 wrote:
malloc 할때에 메모리의 앞부분에 추가 정보를 더하도록 되어있습니다.

그래서, 예를 드러

malloc(4) 라고 하면 4byte 메모리가 할당될것 같지만
실제로는 4+alpha 만큼의 메모리가 할당되고

앞부분의 alpha 값 만큼의 공간에, '뒷쪽으로 몇바이트가 할당되어있습니다' 라는 추가 정보를 기록해둡니다.

free 할때에는 이 정보를 사용하는 것이지요.

이 문제 때문에

작은 사이즈의 메모리를 여러번 할당 받으려고 하면

배보다 배꼽이 커지는 상황이 발생합니다.

예를 들어, 1byte를 100번 할당 받으면

alpha 에 해당하는 공간이 원래 사용하려는 공간 보다 더 커질 수도 있는 것이죠.

메모리가 부족한 시스템에서는 이 문제를 해결하기 위해

특별히 메모리 관리자를 두게 됩니다.

Loki 라이브러리의 SmallObject가 그런 거구요

Boot 라이브러리에도 메모리 관리자가 있습니다. 참고하세요...

이런 비밀이 숨겨져 있었군요!! 저도 궁금하던거라서~ 감사합니다 :lol:

日新 日日新 又日新
Google Talk::chanju_dot_jeon(at)gmail_dot_com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.