infatuation

C Language Keyword 본문

Programming/Java/C/C++

C Language Keyword

화령 2011. 4. 10. 03:09
  • C언어의 키워드로 설명됐었던 extern, static, auto, register 등은 C에서 메모리를 저장하는 지정자 중 하나이다. 그 중 앞의 4가지는 기억 부류 지정자로 이 키워드들에 의해 데이터가 저장될 메모리의 영역이 결정된다. 결정된 메모리의 영역에 따라 데이터의 초기화와 Scope, Lifetime등이 달라진다. 그리고 타입한정자로 분류되는 const, volatile가 있다.
    기억 분류 지정자: extern, static, auto, register
    타입한정자: const, volatile
  • extern
    다른 모듈의 전역 변수나 함수를 사용하겠다는 선언을 명시할 때 사용한다. 변수는 extern 키워드를 지정해줘야 하며 함수는 생략이 가능하다.
    현재 파일에서는 선언되지 않았기 때문에 어느 파일에 선언되어 있는지는 모르지만 데이터 타입은 알수 있어 사용이 가능하다. 링킹이 이뤄지면 오브젝트 파일이 합쳐지므로 다른 파일에 선언된 함수나 변수를 참조하여 사용할 수 있다.
  • static
    1. 변수에서의 사용
    2. 함수에서의 사용
  • 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