컴퓨터/C
C언어에서 변수를 선언하면 어떠한 메모리 공간을 할당받는 것이라고 말씀드렸습니다.
그렇다면 그 메모리 공간 안의 상황은 할당받을 당시 어떤 상황일까요? 어디서 어떠한 의도로 그 메모리 공간이 사용되고 있었는지 모르기 때문에 그 안에는 의미 없는 값이 들어가 있습니다. 이러한 값들을 바로 쓰레기 값이라고 말합니다.
실제로 쓰레기 값이 들어있는지 한번 확인해 보도록 하겠습니다.
int main()
{
int a;
printf("%d\n", a);
return 0;
}
다음과 같은 에러가 발생합니다.
사용자들이 생각하기에는 그렇다면 변수를 선언과 동시에 초기화를 시킨다면 쓰레기값이 없을 텐데 왜 C언어에서는 그런 방향을 만들지 않았을까 하는 의문이 생길 수 있습니다.
이 이유는 연산의 증가가 발생하기 때문입니다.
예를 들어 아래 소스코드의 변수 a와 b를 비교해보겠습니다.
int a = 0; //a에 0의 값을 넣는 연산
scanf("%d",&a); //입력
int b; //b의 선언 초기화 연산 없음
scanf("%d",&b); //입력
이런 경우에는 초기화의 필요가 없습니다. 변수를 생성한 메모리 공간에 scanf함수를 통해 바로 값을 치환하기 때문입니다.
C언어는 가장 효율적인 프로그램, 다시 말하면 컴퓨터가 불필요한 일을 최대한 줄이수 있도록 만들어졌기 때문에 필연적으로 쓰레기 값이 존재할 수밖에 없습니다.
물론 오늘날 컴퓨터들의 사양은 엄청나게 좋아서 이러한 영향이 적을 가능성이 큽니다 하지만, C언어를 사용한다면 이런 개념을 알고 있어야 실수를 줄일 수 있습니다.
쓰레기 값은 결국 C언어에서 최적의 효율을 내기 위해서 생긴 불순물 같은 요소라고 생각하시면 됩니다.
하지만 C언어에서도 프로그램의 안전을 더 우선순위로 하는 변수들에 대해서는 초기화를 자동적으로 해줍니다.
이런 변수들이 바로 전역 변수와 정적 변수들입니다. 이 변수들은 프로그램의 시작과 종료까지 항상 존재하기 때문에 초기화를 따로 하지 않아도 자동적으로 초기화 연산이 들어갑니다.
C 언어 - 동적 메모리 할당 - malloc 함수 (0) | 2021.07.06 |
---|---|
C 언어 - 동적메모리의 개념 (0) | 2021.07.02 |
C 언어 - 열거체(enum) (0) | 2021.06.30 |
C 언어 - 문자열 처리 함수(strlen, strcat, strcpy, strcmp) (0) | 2021.06.30 |
C 언어 - sizeof 함수 (0) | 2021.06.29 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet