예를 들어
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 반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.
malloc 할때에 메모리의 앞부분에 추가 정보를 더하도록 되어있습니다. 그래서, 예를 드러 malloc(4) 라고 하면 4byte 메모리가 할당될것 같지만 실제로는 4+alpha 만큼의 메모리가 할당되고 앞부분의 alpha 값 만큼의 공간에, '뒷쪽으로 몇바이트가 할당되어있습니다' 라는 추가 정보를 기록해둡니다. free 할때에는 이 정보를 사용하는 것이지요. 이 문제 때문에 작은 사이즈의 메모리를 여러번 할당 받으려고 하면 배보다 배꼽이 커지는 상황이 발생합니다. 예를 들어, 1byte를 100번 할당 받으면 alpha 에 해당하는 공간이 원래 사용하려는 공간 보다 더 커질 수도 있는 것이죠. 메모리가 부족한 시스템에서는 이 문제를 해결하기 위해 특별히 메모리 관리자를 두게 됩니다. Loki 라이브러리의 SmallObject가 그런 거구요 Boot 라이브러리에도 메모리 관리자가 있습니다. 참고하세요...
이런 비밀이 숨겨져 있었군요!! 저도 궁금하던거라서~ 감사합니다 :lol:
日新 日日新 又日新 Google Talk::chanju_dot_jeon(at)gmail_dot_com
텍스트 포맷에 대한 자세한 정보
<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]
malloc 할때에 메모리의 앞부분에 추가 정보를 더하도록 되어있습니다.
malloc 할때에 메모리의 앞부분에 추가 정보를 더하도록 되어있습니다.
그래서, 예를 드러
malloc(4) 라고 하면 4byte 메모리가 할당될것 같지만
실제로는 4+alpha 만큼의 메모리가 할당되고
앞부분의 alpha 값 만큼의 공간에, '뒷쪽으로 몇바이트가 할당되어있습니다' 라는 추가 정보를 기록해둡니다.
free 할때에는 이 정보를 사용하는 것이지요.
이 문제 때문에
작은 사이즈의 메모리를 여러번 할당 받으려고 하면
배보다 배꼽이 커지는 상황이 발생합니다.
예를 들어, 1byte를 100번 할당 받으면
alpha 에 해당하는 공간이 원래 사용하려는 공간 보다 더 커질 수도 있는 것이죠.
메모리가 부족한 시스템에서는 이 문제를 해결하기 위해
특별히 메모리 관리자를 두게 됩니다.
Loki 라이브러리의 SmallObject가 그런 거구요
Boot 라이브러리에도 메모리 관리자가 있습니다. 참고하세요...
일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.
[quote="쌀밥"]malloc 할때에 메모리의 앞부분에 추가 정보를
이런 비밀이 숨겨져 있었군요!! 저도 궁금하던거라서~ 감사합니다 :lol:
日新 日日新 又日新
Google Talk::chanju_dot_jeon(at)gmail_dot_com
댓글 달기