C/C++ 프로그램을 하다 보면 종종 메모리를 할당하고 해제하지 않아
시스템에 부하를 주는 일이 다반사이다.
할당한 개수 만큼 해제했는지 일일이 쫓아 다니며 체크하기엔 무리인 경우가 많으며,
core가 떨어지면 core를 분석해보면 찾아갈 수도 있겠지만,
간단히, 해당 프로그램의 매크로로 정의를 해서 확인해 볼 수 있는 방법도 있겠다.
#define malloc(args...) \
(fprintf(stderr, "malloc by %s\n", __FUNCTION__)) ? malloc(args) : NULL)
#define free(args...) \
do { \
fprintf(stderr, "free by %s\n", __FUNCTION__);\
free(args);\
} while(0)
#define realloc(x, args...) \
((x ? fprintf(stderr, "free by %s\n calloc by %s\n", __FUNCTION__, __FUNCTION___ : \
fprintf(stderr, "calloc by %s\n", __FUNCTION__)) ? realloc(x, args) : NULL)
이런 매크로를 사용한다면,
해당 함수에서 몇 번의 메모리 할당이 발생했고, 해제가 일어났는지, 화면상에 나타나는 문장을 보고 판단을 할 수 있을 것이다.
시스템에 부하를 주는 일이 다반사이다.
할당한 개수 만큼 해제했는지 일일이 쫓아 다니며 체크하기엔 무리인 경우가 많으며,
core가 떨어지면 core를 분석해보면 찾아갈 수도 있겠지만,
간단히, 해당 프로그램의 매크로로 정의를 해서 확인해 볼 수 있는 방법도 있겠다.
#define malloc(args...) \
(fprintf(stderr, "malloc by %s\n", __FUNCTION__)) ? malloc(args) : NULL)
#define free(args...) \
do { \
fprintf(stderr, "free by %s\n", __FUNCTION__);\
free(args);\
} while(0)
#define realloc(x, args...) \
((x ? fprintf(stderr, "free by %s\n calloc by %s\n", __FUNCTION__, __FUNCTION___ : \
fprintf(stderr, "calloc by %s\n", __FUNCTION__)) ? realloc(x, args) : NULL)
이런 매크로를 사용한다면,
해당 함수에서 몇 번의 메모리 할당이 발생했고, 해제가 일어났는지, 화면상에 나타나는 문장을 보고 판단을 할 수 있을 것이다.
'IT > 알고리즘' 카테고리의 다른 글
프로세스의 메모리 구조 (4) | 2008.07.08 |
---|---|
기억류 auto, register, static, extern에 대한 설명. (0) | 2008.07.08 |
병합 정렬 (Merge sort)에 대한 선입견 없애기 (0) | 2008.05.21 |
gcov - 쓰레기 코드 찾아내기 (0) | 2008.03.11 |
[펌] 사용자수준 쓰레드와 커널수준 쓰레드의 차이? (0) | 2008.02.27 |