malloc 관련 질문입니다.

shepherd44 2014.07.09 05:26 조회 수 : 3218

zImage에서 압축 해제코드를 분석하던 중 malloc을 사용하길래 해당 함수도 같이 분석했습니다. 이 때 나온 의문점인데 스터디 내에서 해결되지 않아 질문 올립니다. 


 질문 1-1:  압축해제에 사용한 malloc 은 다음과 같습니다. 전역변수로 heap의 시작주소인 free_mem_ptr을 malloc_ptr에 저장해서 사용합니다.  해당 주소부터 전달받은 size만큼 영역을 할당해서 리턴해 주는데, free를 할 때 문제가 있어 보입니다.

 free를 할 때 malloc_count를 이용하여 할당영역 해제를 해주는데, 부주의한 실수로 malloc할당이 하나가 남아있다면, malloc_count는 0이 아니므로, malloc_ptr은 free_mem_ptr로 초기화 되지않고 상승된 주소로 그대로 있습니다.

 이 말은 malloc 할당이 하나라도 남은 상태에서 malloc을 계속해서 쓴다면, free를 해도 free가 되지 않는 경우가 될 것 같습니다. 왜 이런걸까요? include/linux/decompress/mm.h의 malloc 이 아닌 lib/inflate.c에 존재하는 malloc 또한 같은 상황입니다.

 

 33 static void *malloc(int size)

 34 {       

 35     void *p;

 36 

 37     if (size < 0)

 38         return NULL;

 39     if (!malloc_ptr)

 40         malloc_ptr = free_mem_ptr;

 41 

 42     malloc_ptr = (malloc_ptr + 3) & ~3;     /* Align */

 43 

 44     p = (void *)malloc_ptr;

 45     malloc_ptr += size;

 46 

 47     if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)

 48         return NULL;

 49 

 50     malloc_count++;

 51     return p;

 52 }

 53 

 54 static void free(void *where)

 55 {

 56     malloc_count--;

 57     if (!malloc_count)

 58         malloc_ptr = free_mem_ptr;

              /*! 

               * malloc_count == 0 -> 할당된 영역이  없으면 malloc_ptr = heap_start_address 

               * 의문점 -> 힙 할당이 하나라도 되있는 상태에서

               * 말록을 사용하면 malloc_ptr이 커지기만 해서 결국 메모리 사이즈를 벗어남

               * 후기에서 질문.

              */

 59 }

 

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22255
418 ARM asssembler질문좀 드립니다. [3] 빈즈파덜 2014.08.05 2392
417 CPU가 현재 실행중인 PID값 받아오는거 질문드립니다. [2] file 이런Linux 2014.07.15 9523
416 linux kernel governor(onDemand) 질문입니다. hy 2014.07.10 1934
415 DS-5 Steamline관련 질문 [2] jmkim0726 2014.07.09 3023
» malloc 관련 질문입니다. [8] shepherd44 2014.07.09 3218
413 Subversion 서버 설정간에 에러 메시지 오뎅하나 2014.06.22 2189
412 arm 스터디에 참가하고 싶은데 아는게 너무 없네요. [1] 니미로 2014.06.18 1752
411 Debug Hacks 책 보신 분~ [1] 저스틴 2014.06.17 2149
410 arm보드 리눅스 oops 질문드립니다. [1] 김각래 2014.06.15 2437
409 CONFIG_CPU_V7M 에 대해서 [2] 安종현 2014.06.10 1843
408 ㅎㅎㅎ 어떻게 해석하시나요? [8] 백창우 2014.06.01 2490
407 [Kernel x86_64 & Hypervisor 11차] 스터디에서 선배님들에게 질문과 더불어.. [1] CoderBeast 2014.05.26 1562
406 ARM Instruction set [4] 블루문 2014.05.18 2281
405 이전차수의 x86 kernel 자료들을 볼수가 없습니다. [2] 이영주1 2014.05.09 1678
404 NUMA 시스템에서 memory 할당 관련 [1] 하이디제이 2014.05.08 1999
403 선배님들 ARM Developer's Guide PPT은 어디서 다운 받을 수 있을까요 다이어트킹 2014.05.08 2147
402 [ARM Kernel 11차 B팀] 선배님들께 아키텍쳐 선정과 관련하여 질문드립니다. [1] Luke 2014.04.29 1787
401 SCHED_RR과 SCHED_FIFO는 실시간 스케쥴링인가 아닌가. 인터오아시스 2014.04.28 1908
400 X86 architecture의 구조 좋은 책이 있나요? [2] 이영주1 2014.04.28 2125
399 DS-5 쓰시는 분 계신가요? [3] 삐뿌삐뽀 2014.04.22 1993
XE Login