C 동적배열 할당, 초기화시에 궁금한점이 생겼습니다.
글쓴이: morolty / 작성시간: 월, 2014/11/24 - 12:27오후
int main(void){ char *buff = NULL; while(1){ buff = (char *)malloc(sizeof(char) * 1024 * 1024 * 16); // memset(buff, 0x00, sizeof(char) * 1024 * 1024 * 16); sprintf(buff, "aasdfasdf"); fprintf(stderr, "%s\n", buff); free(buff); buff = NULL; sleep(5); } return 0; }
정말 단순하게 할당, 문자열 복사, 출력하는 코드입니다.
1. 현재 동적배열 초기화를 위한 memset부분이 주석처리 되어 있는데요
이, 초기화부분이 없이 메모리 할당->문자열복사->출력->해제 를 반복하면 ps -eo rss로 본 메모리 사용량이 쭉 716바이트 입니다.
.
.
2. 그런데 만약 memset부분의 주석을 풀고 0x00으로 초기화를 할 시엔 1024*1024*16이 더해진17100 값이 계속됩니다.
상식적으로는 free를 했을 경우, 비록 안의 데이터값은 지워지지 않는다 해도 할당해제를 했기 때문에 해당 메모리 사용량이 사라져야 할 것이라 생각했는데
.
.
3. 제가 뭔가 잘못 알고 있는게 있을까요?
만약 제가 잘못 알고 있는 것이랄면, 동적 배열에 대한 초기화를 어떤식으로 해줘야 할지 궁금합니다. (tcp 통신 send버퍼라, 초기화작업 없이 보내니 쓰레기값이 날라가네요..)
읽어주셔서 감사합니다.
Forums:
이렇게 바꾸어보세요
int main(void){
while(1){
char *buff = NULL;
sleep(5);
buff = (char *)malloc(sizeof(char) * 1024 * 1024 * 16);
sleep(5);
// memset(buff, 0x00, sizeof(char) * 1024 * 1024 * 16);
sprintf(buff, "aasdfasdf");
fprintf(stderr, "%s\n", buff);
free(buff);
sleep(5);
buff = NULL;
sleep(5);
}
return 0;
}
이렇게 하신 후에 각 sleep마다 메모리를 확인해보시면
답을 구하실 수 있을것 같아요.
댓글 달기