CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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~~ ^_* -

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.