[ CnUnix ] in KIDS 글 쓴 이(By): valken (:이쁜왕자:) 날 짜 (Date): 2010년 08월 06일 (금) 오후 04시 13분 44초 제 목(Title): 함수 내의 malloc - free 특정 모듈이 돌기 시작하면, 장비의 성능이 과격하게 떨어지는 문제가 있어서, 해당 모듈을 디버깅 하기 시작했습니다. 어떤 함수를 상당히 자주 호출하는데, 대략 이런식으로 짜여져 있더군요. int func_a() { int ret = 0; void* p; p = malloc( 대략 2MB ); /* blah blah.. ret = 1; */ free(p); return ret; } 2MB 정도 되는 메모리를 auto varible 로 쓰기 싫으니, malloc 해서 쓰겠다고 저렇게 만든 것인데, 문제는 이 함수가 지나치게 자주 호출된다는 것이네요. 호출될때 마다 malloc - free 를 반복하다 보니, 이넘의 허접한 임베디드 시스템에서는 꽤나 부하가 걸립니다. 메모리 프레그멘테이션도 생기는 느낌이고요. 여튼 그래서, int func_a() { int ret = 0; static void* p = NULL; if (p == NULL) p = malloc( 대략 2MB ); /* 하략 */ 이렇게 static variable 하나 잡아서, free 없이 계속해서 써먹는 걸로 바꾸고 나니 한결 나아진 느낌입니다. .. 이 코드 역시 지금은 퇴사한 사람이 작성한 코드로군요. 제가 이 회사를 퇴사하면, 누군가가 제 코드를 보고서는, 아니 이따위로 코딩해 놓고 퇴사해 버리다니.. 하며 뒷담화를 깔 사람이 아마도 많이 있겠지요? "웬 초콜릿? 제가 원했던 건 뻥튀기 쬐끔과 의류예요." "얘야, 왜 또 불평?" -> 자음 19개와 모음 21개를 모두 사용하는 pangram - 이쁜왕자 - - Valken the SEXy THief~~ ^_* - |