응애맘마조

전역변수(Global Variable) 본문

공부/개인

전역변수(Global Variable)

TH.Wert 2023. 3. 7. 22:19

전역변수는 지역변수와는 다르게 중괄호 내에 선언되지 않습니다. 이 변수는 프로그램이 처음 실행되면 메모리 공간에 할당되고 프로그램이 종료될 때까지 남아있는 변수입니다. 그리고 프로그램 전체 영역 어디서든 접근이 가능합니다.

전역변수를 초기화하지 않으면 0으로 초기화됩니다.

지역변수처럼 쓰레기 값이 나오는 것과는 비교되는 특징이 보입니다.

0으로 되는 이유는 초기화되지 않은 전역변수는 데이터 영역에 저장하면 BSS(데이터 영역과 힙 영역 사이)에 저장됩니다.

이 변수들은 BSS에서 0으로 채우는 과정을 거칩니다. (출처) : https://hydroponicglass.tistory.com/182

파일 형식 중에서 .bss가 있습니다. 컴파일러와 링커가 처음에 0 값으로 표현되는 정적으로 할당된 변수를 포함하는 데이터 영역의 부분으로 사용합니다. (출처)  : https://ko.wikipedia.org/wiki/.bss

 

전역변수와 동일한 이름의 지역변수가 선언되면 전역변수를 가리게 됩니다.

위의 사진처럼 전역으로 1을 먼저 선언했지만 콘솔 출력창에는 출력이 되지 않습니다.

(특성을 설명하기 위해 변수의 이름을 같게 했지만 가급적 이러한 상황을 만들지 않고 가급적 이름을 다르게 하는 것이 좋습니다.)

 

전역변수는 어디에서나 선언 및 접근이 가능하기에 보기에는 이것만 쓰면 지역변수나 동적변수는 사용하지 않아도 될 것이라고 생각할 수도 있습니다. 하지만 무분별하게 사용하게 되면 프로그램의 최적화는 물론이고 메모리를 비효율적으로 사용하게 됩니다.

(출처) : https://okky.kr/articles/480126

위의 모습은 언리얼 엔진에서 너무 무분별하게 사용한 모습을 볼 수 있습니다. 과도한 선언과 잘못된 프로그래밍 방식에 의해 여기저기에 꼬인 이것을 스파게티 코드(Spaghetti Code)라고 합니다. 그렇기 때문에 필요한 상황에서는 사용하는 것이 맞지만 사용에는 신중해야 합니다.

 

읽어주셔서 감사합니다.

'공부 > 개인' 카테고리의 다른 글

static  (0) 2023.03.28
지역변수와 동적할당을 각각 스택과 힙에 할당하는 이유  (0) 2023.03.27
메모리 구조  (0) 2023.03.23
동적할당(Dynamic Allocation)  (0) 2023.03.08
지역변수(Local Variable)  (0) 2023.03.06
Comments