2011년 6월 10일 금요일

char* 문자열 버퍼 초기화의 내부


내가 예전에 문자열을 초기화 하던 방법:

char temp[64];
temp[0] = 0;

몇년전에 캡콤 밴쿠버에서 일할 때, 동료 프로그래머 하나가 다음의 방법이 더 낫다고 귀뜸해줬다.

char temp[64] = {0, };

그 친구가 이 방법이 나은 이유를 말해줬던거 같은데 사실 기억은 안나고... -_- 그냥 그 뒤로 줄곧 이 방법을 사용해왔다. 뭐 더 나은 방법이라니까.... 근데 최근에 우연히 이 방법이 왜 더 나은지를 알게되었다.

Xbox 360에서 프로파일 캡춰를 하던 도중 위의 코드가 컴파일되면 어떻게 변하는지를 찾아냈으니... 그건 바로 다음과 같다:

char temp[64];
memset(temp, 0, sizeof(char) * 64);

흥미로운 사실.. memset이 호출된다. 이 방법은 5~10 마이크로세컨드 정도가 걸리는데 사실 뭐 그리 걱정할 정도는 아니다. 근데 생각해보면 char 버퍼 선언뒤에 곧바로 strcpy 등의 함수를 호출한다면 굳이 위와 같은 초기화는 할 필요가 없다고 생각된다. (뭐가되든 null 캐릭터가 들어가기만 하면 되니까...)

댓글 2개: