Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

메모리 구조, 변수 본문

Study/Etc

메모리 구조, 변수

awakerrday 2017. 12. 2. 11:39


메모리 구조



전역변수 (global) 

- 프로그램 실행 시 데이터 영역에 할당되어서 프로그램이 종료될 때까지 남아있는 변수 

- 초기화 되지않은 전역변수는 BSS(Block Started by Symbol) 영역에 할당 


정적변수 (static) 

- 프로그램 실행 시 데이터 영역에 할당되어서 프로그램이 종료될 때까지 남아있는 변수 

- 초기화 되지않은 정적변수는 BSS(Block Started by Symbol) 영역에 할당 

  (but 코드 본문에서 사용되지 않으면 메모리 할당x) 

- 전역변수의 성격을 지니는 지역변수로 static 변수가 선언된 함수가 처음 호출될 때 1번만 초기화 

- 함수 내에서 접근 가능 + 함수가 끝나도 메모리 유지 가능 


지역변수 (local) 

- 중괄호 {} 내에서 선언된 변수. 선언된 지역 내에서만 메모리 유지 및 유효함 

- 암시적으로 auto 키워드로 선언되기 때문에 자동으로 register 변수로서 레지스터에 할당되기도 함 

  (컴파일러에 의한 최적화 수행) 

- 레지스터에 할당되어 전역변수보다 빨라질 수 있다는 장점 


register 변수 

- 사용자가 직접 자주 사용되는 지역변수를 레지스터에 할당하고 싶을 때 사용 

  (레지스터 공간 여건에 따라 할당) 


volatile 변수 

- 현재 코드 밖에서 변수의 값이 변할 수 있기 때문에 컴파일러가 최적화를 하지 않도록 함 

  (컴파일러에 의한 최적화로 인한 코드 단순화, 레지스터 사용 등을 막음) 

- MMIO (Memory-mapped I/O)로 하드웨어 장치에 매핑된 변수, 인터럽트 서비스 루틴 및 멀티스레드에서 

  공유되는 전역변수에 사용



ps. 힙 영역에 동적 할당된 공간을 전역적으로 쓰고 싶다면? 

전역 포인터 변수 선언 후 main 함수 내에서 동적할당


참고: http://tcpschool.com/c/c_memory_structure 

https://ko.wikibooks.org/wiki/C_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%9E%85%EB%AC%B8/%EB%B3%80%EC%88%98%EC%9D%98_%EC%9C%A0%ED%9A%A8%EB%B2%94%EC%9C%84%EC%99%80_%EC%A0%80%EC%9E%A5_%EC%9C%84%EC%B9%98


Comments