[긴급]전역으로 선언한 메모리의 해제..
글쓴이: leolo / 작성시간: 월, 2003/05/26 - 7:48오후
아래와 같이 전역으로 선언한 메모리 구조에서도
메모리 누수가 발생하는지요..
메모리 동적 할당이 아닌 이상, 다음과 같이 잡고
프로그램이 정상적으로 종료 되면.. 메모리는 해제 되는지 알고 싶습니다.
만약, 이 프로세스가 좀비가 된다면,
또 한 어떠한 상황이 발생하는지요. 좀비가 된 후에
죽어 없어진다면요..
끝으로 메모리 누스를 체크하는 방법을 알려주세요..
툴 말고요.. 임베디드보드에서 사용하는지라.. 툴로는 힘듭니다.
/proc/meminfo로 확인하는 방법 좀 알려주세요..
어떤 부분을 보면 되는지요..
제 짧은 생각이라.. 문의 내용이 맡는지 잘 모르겠습니다.
부탁드립니다..
XXXX.h struct bec_conn_info { uint8_t line; uint8_t dev_id; uint8_t ba[6]; uint16_t port; uint32_t tx; uint32_t rx; uint8_t name[248]; } __attribute__ ((packed)); #define BEC_CONN_INFO_SIZE 266 extern bec_conn_info peerlist[]; XXXX.c struct bec_conn_info peerlist[BT_NBT_DATAPORTS];
Forums:
메모리 누수는...
전역변수는 메모리 누수가 절대 일어나지 않습니다.
전역변수는 프로그램 로드시에 지정된 양만큼만 미리 공간이 확보되며, 이 공간은
크기도 변하지 않고, 프로그램이 종료될 때까지 같이 따라갑니다.
또한 전역변수 중에 static으로 된 것들은 그 내용이 프로그램 속에 아예 하드코딩됩니다.
(1M 정도의 char 전역변수 배열 하나를 한쪽은 그냥 auto로 놓고 한쪽은 static으로
해서 한번 컴파일해보세요. static으로 한쪽은 실행파일 크기가 진짜 1M 넘게 나옵니다.)
메모리 누수는 주로 malloc()으로 할당한 메모리를 제때 해제하지 않을 때에만,
생깁니다. 또한 무한 재귀호출을 할경우에도 메모리누수와 비슷한 현상이
벌어질 수 있는데 이땐 재귀호출을 어떻게 해서 풀어버리면 사라지죠.
(함수 호출할때마다 매번 스택이 까먹히니까요)
그리고 제발 좀 [긴급] 붙여주지 않았으면,
붙여봤자 아무 소용 없습니다
Written By the Black Knight of Destruction
Re: 메모리 누수는...
수행시의 크기는 1M가 넘지만 실행파일은 안 그럴 수도 있습니다.
초기화되지 않은 전역변수는 BSS 영역에 생기는 것이 그 이유입니다.
static int a[1000000];
main()
{
}
와
int a[1000000] = {1};
main()
{
}
의 컴파일한 실행파일의 크기를 비교해 보시면 차이를 아실 수 있습니다.
비슷한 논의가 전에 한번 됐었던 것 같은데...
http//bbs.kldp.org/viewtopic.php?t=3643&highlight=BSS
여기에 있네요.
알고 쓰신 것이겠지만 전역변수는 auto로 정의가 되지 않습니다. ^^
전역변수에 static 이라고 쓰면 해당 파일 밖에서는 정의한 변수가 안보이도록 하는 역할을 합니다.
댓글 달기