변수가 생성되는 기억 장소가 다르다. 전역 변수는 한번 정해진 메모리 위치에 계속 남아 있어야 하므로 정적 데이터 영역에 생성된다. 정적 데이터 영역이란 프로그램의 코드 바로 다음에 위치하는 메모리 공간인데 프로그램 실행중에 계속 유지된다. 지역 변수는 프로그램 실행중에 생성, 파괴를 반복하므로 스택에 생성된다. 스택(Stack)이라는 용어는 조금 어려운 개념인데 일단 데이터의 임시 저장소라고 생각하면 된다.
프로그램은 실행에 필요한 임시적인 정보들을 스택에 차곡 차곡 저장한다. 지역 변수, 인수, 함수가 돌아갈 번지 등이 스택에 생성되었다가 사라졌다가를 반복한다. 지역 변수는 임시 저장소인 스택에 생성되기 때문에 통용 범위가 함수로 국한되고 함수가 종료되면 같이 사라지는 것이다
초기화 여부가 다르다. 전역 변수는 별도의 초기식이 없더라도 0으로 초기화된다. 위 예제의 global은 생성되자 마자 0이 될 것이다. 물론 int global=5; 와 같이 별도의 초기식을 주면 이 값으로 초기화된다. 프로그램 실행 직후에 딱 한번만 초기화하면 되므로 전역 변수 초기화에 걸리는 시간은 거의 무시해도 될 정도로 작다. 전역 변수는 프로그램 전체에 걸쳐 사용되는 중요한 변수이므로 초기값을 지정하지 않더라도 0으로 초기화를 해 주는 것이다.
반면 지역 변수는 별도의 초기식이 없을 경우 초기화되지 않는다. 따라서 무슨 값을 가지게 될 지 알 수 없는데 이때 초기화되지 않은 값을 쓰레기값(garbage)이라고 한다. 물론 초기식을 명시적으로 지정해 주면 초기화할 수도 있다. 초기식이 없을 때 지역 변수를 초기화하지 않는 이유는 전역 변수와는 달리 함수가 호출될 때마다 변수가 새로 생성되기 때문이다. 매번 변수를 초기화하자면 그만큼 실행 속도가 느려지므로 초기화를 하지 않는다.
변수의 파괴 시기가 다르다. 변수란 값을 기억하기 위해 메모리를 할당받아 사용한다. 변수를 다 사용했으면 파괴되는데 변수를 파괴한다는 것은 이 변수가 차지하고 있던 메모리를 회수한다는 뜻이다. 시스템의 메모리가 무한하지 않으므로 변수는 필요할 때만 메모리를 차지하며 다 사용하면 다른 변수를 위해 자리를 내 주어야 한다. 변수의 메모리가 회수되면 변수의 존재 자체가 사라진다.
전역 변수는 프로그램에 소속되어 있고 모든 함수에서 사용 가능해야 하므로 프로그램이 실행중인 동안에는 파괴되지 않는다. 실행 직후에 생성되어 프로그램이 실행되는 동안에는 계속 메모리를 차지하고 있으며 프로그램이 종료되면 비로소 파괴된다. 즉, 전역 변수는 프로그램과 운명을 같이 한다.
지역 변수는 특정 함수 내부에서만 사용되므로 함수가 실행중일 때만 메모리를 차지하며 함수가 끝나면 변수의 생명도 끝이 난다. 함수의 임무를 위해 생성되는 임시 기억 장소이기 때문에 함수가 종료되면 더 이상 이 변수를 유지할 필요가 없어진다. 즉, 지역 변수는 자신이 속해 있는 함수와 운명을 같이 한다. 함수가 호출되면 생성되고 함수가 끝나면 파괴된다. 그러다가 또 함수가 호출되면 생성되고 파괴되기를 계속 반복한다.
위 예제에서 global은 프로그램 종료시에 파괴되며 local은 main 함수 종료시에, i는 func 함수 종료시에 파괴된다. main의 지역 변수는 특수하게도 전역 변수와 생성, 파괴 시기가 같은데 이는 main 함수 자체가 프로그램 그 자체이기 때문이다.
출처 : www.winpai.co.kr
프로그램은 실행에 필요한 임시적인 정보들을 스택에 차곡 차곡 저장한다. 지역 변수, 인수, 함수가 돌아갈 번지 등이 스택에 생성되었다가 사라졌다가를 반복한다. 지역 변수는 임시 저장소인 스택에 생성되기 때문에 통용 범위가 함수로 국한되고 함수가 종료되면 같이 사라지는 것이다
초기화 여부가 다르다. 전역 변수는 별도의 초기식이 없더라도 0으로 초기화된다. 위 예제의 global은 생성되자 마자 0이 될 것이다. 물론 int global=5; 와 같이 별도의 초기식을 주면 이 값으로 초기화된다. 프로그램 실행 직후에 딱 한번만 초기화하면 되므로 전역 변수 초기화에 걸리는 시간은 거의 무시해도 될 정도로 작다. 전역 변수는 프로그램 전체에 걸쳐 사용되는 중요한 변수이므로 초기값을 지정하지 않더라도 0으로 초기화를 해 주는 것이다.
반면 지역 변수는 별도의 초기식이 없을 경우 초기화되지 않는다. 따라서 무슨 값을 가지게 될 지 알 수 없는데 이때 초기화되지 않은 값을 쓰레기값(garbage)이라고 한다. 물론 초기식을 명시적으로 지정해 주면 초기화할 수도 있다. 초기식이 없을 때 지역 변수를 초기화하지 않는 이유는 전역 변수와는 달리 함수가 호출될 때마다 변수가 새로 생성되기 때문이다. 매번 변수를 초기화하자면 그만큼 실행 속도가 느려지므로 초기화를 하지 않는다.
변수의 파괴 시기가 다르다. 변수란 값을 기억하기 위해 메모리를 할당받아 사용한다. 변수를 다 사용했으면 파괴되는데 변수를 파괴한다는 것은 이 변수가 차지하고 있던 메모리를 회수한다는 뜻이다. 시스템의 메모리가 무한하지 않으므로 변수는 필요할 때만 메모리를 차지하며 다 사용하면 다른 변수를 위해 자리를 내 주어야 한다. 변수의 메모리가 회수되면 변수의 존재 자체가 사라진다.
전역 변수는 프로그램에 소속되어 있고 모든 함수에서 사용 가능해야 하므로 프로그램이 실행중인 동안에는 파괴되지 않는다. 실행 직후에 생성되어 프로그램이 실행되는 동안에는 계속 메모리를 차지하고 있으며 프로그램이 종료되면 비로소 파괴된다. 즉, 전역 변수는 프로그램과 운명을 같이 한다.
지역 변수는 특정 함수 내부에서만 사용되므로 함수가 실행중일 때만 메모리를 차지하며 함수가 끝나면 변수의 생명도 끝이 난다. 함수의 임무를 위해 생성되는 임시 기억 장소이기 때문에 함수가 종료되면 더 이상 이 변수를 유지할 필요가 없어진다. 즉, 지역 변수는 자신이 속해 있는 함수와 운명을 같이 한다. 함수가 호출되면 생성되고 함수가 끝나면 파괴된다. 그러다가 또 함수가 호출되면 생성되고 파괴되기를 계속 반복한다.
위 예제에서 global은 프로그램 종료시에 파괴되며 local은 main 함수 종료시에, i는 func 함수 종료시에 파괴된다. main의 지역 변수는 특수하게도 전역 변수와 생성, 파괴 시기가 같은데 이는 main 함수 자체가 프로그램 그 자체이기 때문이다.
출처 : www.winpai.co.kr
'old drawer > Operating System' 카테고리의 다른 글
[OS] 운영체제를 공부합시다!! (0) | 2011.06.20 |
---|---|
[OS] GeekOS Projects!! (0) | 2011.06.20 |
[OS] Semaphore 란? (0) | 2011.05.24 |