반응형

변수에는 두 가지 종류가 있다.


자동변수

정적변수


자동변수는 필요할 때 만들었다가 필요가 없으면 다시 사라집니다.

정적변수는 프로그램을 실행해서 끝날 때까지 계속해서 메모리상에 존재합니다.


자동변수를 오토(Auto) 변수, 정적변수를 스태틱(Static) 변수라고도 해요.


정적변수는 메모리 값이 0으로 초기화 되어 있지만,

자동변수는 메모리 값이 정해져있지 않고 초기화 되어 있지 않습니다.

그래서 사용하기 전에 초기화를 해줘야 해요.


왜 그럴까요?


그 이유는 메모리 영역(세그먼트)가 다르기 때문이에요.


자동변수는 스택 세그먼트에 생성이 됩니다.

스택은 선형구조로 되어 있고 LIFO(Last In First Out)로 되어 있어요.

그렇기 때문에 가장 최근에 입력한 자료부터 출력하죠.

프로그램이 실행되는 동안에 생성되거나 삭제되기 때문에 명시적으로 초기화 하지

않는 이상 초기화 되지 않습니다. 초기화 여부는 개발자에게 달려있고,

초기화를 하지 않을 때는 속도면에서 좋습니다.


정적변수는 데이터 세그먼트에 생성이 돼요. 프로그램을 실행하기 전부터 

생성되어 있고, C소스를 컴파일 및 어셉블한 후에 만들어진 오브젝트 프로그램 안에

존재하죠. 그리고 프로그램이 실행되어 끝날 때까지 계속해서 메모리상에 존재합니다.

개발자가 지정한 값이 아닌 경우는 0으로 초기화 되어 있습니다.


상황에 맞게 쓰면 되겠습니다~


[참고] 도서, C를 배우기 전에 반드시 알아야 할 것들 (루비페이퍼 저 무라야마 유키오 옮김 이해란)

반응형

'IT > C' 카테고리의 다른 글

[C] 프로세스와 스레드(Process&Thread)  (0) 2018.06.19

+ Recent posts