(포스팅 2022.10.13)
C언어에서 전역변수는 별다른 초기화를 하지 않아도 0으로 초기화되지만, 지역변수는 초기화를 하지 않으면 gabage 값이 들어있습니다.
아래는 테스트한 결과입니다.
컴파일 때부터 차이가 발생합니다. 똑같이 초기값을 넣지 않아도, 전역변수에선 경고가 발생하지 않고 지역변수에서만 경구가 발생합니다. 빌드를 위하여 #pragma 를 사용하였습니다.
전역변수만 자동으로 초기화되는 이유는 다음과 같습니다.
ㅇ 전역 변수의 경우 - heap 영역에 자리잡게 되어 위치가 고정되고, 프로그램 실행될때 한번만 초기화하면 된다. - 따라서 프로그램이 로딩될때 메모리 전체를 한번에 0으로 초기화해버리면, 각각의 변수를 초기화하지 않아도 된다. |
ㅇ 지역 변수의 경우 - stack 영역에 자리잡으므로, 변수는 함수가 호출될 때마다 위치가 바뀌어 재생성된다. - 자동으로 초기화를 한다면, 함수가 호출될 때마다 초기화를 해야 하므로 오버헤드가 발생한다. |
오늘도 또 하나 배웠습니다. 궁금하신 점 있으시면 댓글 주세요.
언제나 감사드립니다.
C언어) 함수의 인자와 리턴값으로 구조체 사용하기 (0) | 2022.10.14 |
---|---|
C언어) scanf_s로 문자형 받을 때 발생하는 오류 (0) | 2022.10.14 |
(C언어) 문자열 배열에 문자열 대입 불가 (0) | 2022.10.12 |
(C언어) scanf와 fgets 함수를 같이 사용하면 입력 오류 발생 (0) | 2022.10.11 |
(C언어) ARRAY_SIZE()로 배열크기 측정 시 유의점 (0) | 2022.10.07 |
댓글 영역