C 코딩을 하면서 가장 중요하게 고려해야 하는 부분 중 하나라고 생각되어 정리 겸 기록을 남깁니다.
프로그램은 메모리의 4개 영역으로 구분됨
- TEXT(소스코드)
- BSS(초기화되지 않은 변수) : 글로벌 변수 중 초기화되지 않은 경우 담김, 그래서 가능하면 글로벌 변수는 초기화 해주는 것이 좋음.
- STACK
- HEAP
로컬 변수의 종류
지역 변수 타입 auto, static, extern, register 가 있다.
- auto 는 스택 세그먼트에 저장되고: 스코프에 따라 자동으로 소멸된다.
- static 은 데이터 세그먼트에 쌓인다: 프로그램이 종료될 때까지 유지된다.
- register 는 레지스터를 변수 메모리로 사용하고: 임베디드 시스템에 종종 사용된다고 한다.
- extern 은 다른 파일에 정의된 변수를 사용하기 위해 선언된다: 외부 파일의 전역변수가 해당될 수 있다.
각 세그먼트는
- 스택: auto, local 스코프 변수가 사용하는 메모리 영역, 임시 메모리 성격, 작고 빠르다. 대략 1MB 수준.
- 힙: 동적 할당되는 메모리 영역, 크다. 1GB 정도도 가능.
- 텍스트: 실행 파일에 속해 있는 기계어가 담긴 부분, 이 영역을 고치면 해킹!
- 데이터: immutable 문자열 같은 상수나 정적 변수, 전역 변수들이 저장된다. 힙 처럼 자동으로 관리된다.
로 구분된다.
글로벌 영역 (함수 밖)의 static 은 해당 파일 내에서만 접근하기 위한 제한자로 사용된다. 선언하지 않을 경우 헤더 파일에 extern 으로 해당 변수를 선언하고 다른 파일에서 참조하여 (#include) 접근할 수 있게 된다.
'Development > Coding' 카테고리의 다른 글
자바스크립트용 Key bind 라이브러리 (0) | 2015.11.12 |
---|---|
네이버의 새로운 코딩용 폰트 공개 (0) | 2015.09.15 |
Git 을 사용하면서 발생하는 실수를 복구 하기 위한 명령 몇 가지 케이스 (0) | 2014.02.11 |
나눔고딕 적용시 문제점 (1) | 2014.02.03 |
Dart lang (0) | 2013.11.15 |