Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- TPC-C
- 3GS
- JNI
- 앱
- Benchmark
- 봄
- 과제
- rdf
- 우분투
- 쉽지요잉
- 블로그가
- 건조합니다
- OSGi
- 원격으로 컴퓨터 끄기
- 안드로이드
- 아이폰
- 서비스
- book
- Mac
- ontology
- XML
- 이게 뭐니
- OWL
- java
- TunesMate
- iphone
- w3c
- uPnP
- Android
- 설명좀 써줍니다
Archives
- Today
- Total
infatuation
C Language Keyword 본문
- C언어의 키워드로 설명됐었던 extern, static, auto, register 등은 C에서 메모리를 저장하는 지정자 중 하나이다. 그 중 앞의 4가지는 기억 부류 지정자로 이 키워드들에 의해 데이터가 저장될 메모리의 영역이 결정된다. 결정된 메모리의 영역에 따라 데이터의 초기화와 Scope, Lifetime등이 달라진다. 그리고 타입한정자로 분류되는 const, volatile가 있다.
- 기억 분류 지정자: extern, static, auto, register
- 타입한정자: const, volatile
- extern
- 다른 모듈의 전역 변수나 함수를 사용하겠다는 선언을 명시할 때 사용한다. 변수는 extern 키워드를 지정해줘야 하며 함수는 생략이 가능하다.
- 현재 파일에서는 선언되지 않았기 때문에 어느 파일에 선언되어 있는지는 모르지만 데이터 타입은 알수 있어 사용이 가능하다. 링킹이 이뤄지면 오브젝트 파일이 합쳐지므로 다른 파일에 선언된 함수나 변수를 참조하여 사용할 수 있다.
- static
- 변수에서의 사용
- 함수에서의 사용
- register
- 레지스터는 CPU 안에 포함된 메모리로 가장 빠른 속도를 가진 메모리이다 하지만 아주 작아서 프로그램이 사용할 수 있는 크기는 극히 적다. 레지스터에 모든 변수를 올려서 사용할 수가 없다. 이러한 레지스터의 메모리를 할당받아 사용하는 변수가 레지스터 변수이다. 변수 선언 시에 앞에 register 키워드를 붙여준다. 하지만 꼭 보장되는 것은 아니며 현재 레지스터의 사용량에 따라 공간이 있을 때만 할당된다. 반복문에서 사용되는 변수처럼 자주, 반복적으로 사용되는 변수에 사용하면 빠르게 연산이 수행되어 성능을 높일 수 있다.
register int i; // Load R, i for() { i = i+3; // ADD R,3 } // Register keyword가 없을 경우 for 문 안의 연산은 Load R,i >> ADD R,3을 // 수행시마다 계속 반복해야하므로 성능이 떨어진다.
- auto: volatile의 반대되는 개념으로 default로 사용된다.
- const
- 값의 변경을 금지하는 키워드로 const 한정자가 지정된 변수는 상수로 사용한다. read-only로 처리
- #define으로 선언한 상수값은 대치만 될 분 타입검사를 수행하지 않는다 하지만 const로 만든 상수는 데이터 타입을 나타낼 수 있다.
- const는 일반 변수와 같지만, 초기값 이외의 값으로 변경될 수 없다는 차이점이 있다. 따라서 전역 상수로 정의된다면 Code영역의 Data session에 저장되고 지역상수로 정의하면 스택에 저장된다.
#define MAX 100 // 데이터 타입이 없다 const int value = 100; // 데이터 타입이 정해짐 int b[value]; // 에러: why???
'Programming > Java/C/C++' 카테고리의 다른 글
Collection Framework(Collection_Map) (0) | 2011.04.09 |
---|---|
Generic (0) | 2010.10.26 |
Java Callback Function (0) | 2010.10.26 |
JVM Terminated Exit code = -1 (0) | 2010.05.15 |