Variable

Education/C++ programming 2012. 1. 13. 11:16

 
  1. 변수(Variable)

    • 전역변수(Global variable)

      • 선언 위치 : 함수 바깥에서 선언

      • 통용 범위 : 프로그램 전체가 공유

        • 선언된 위치 이후에는 어디서든지 이 변수를 사용 가능

      • 파괴 시기 : 프로그램과 동일

        • 실행 직후에 생성되어 프로그램이 실행되는 동안에는 계속 메모리를 차지하고 있으며 프로그램이 종료되면 파괴됨

      • 생성되는 기억 장소 : 정적 데이터 영역

        • 한번 정해진 메모리 위치에 계속 남아 있어야하므로 정적 데이터 영역에 생성

        • 정적 데이터 영역 (페이지 참조)

          • 프로그램 코드 바로 다음에 위치하는 실행 파일의 한 부분으로 프로그램이 실행될 때 메모리롤 로드되어 실행 중에 계속 유지

      • 초기화 : 0 으로 초기화

        • 별도의 초기식이 없더라도 0으로 초기화

        • 초기화와 소멸은 임의의 순서대로 이뤄짐

    • 지역변수(Local variable)

      • 선언 위치 : 함수 내부에서 선언

      • 통용 범위 : 자신이 선언된 함수

        • 자신이 선언된 함수에 소속되어 있기 때문에 함수 외부에서는 이 변수 사용 불가

      • 파괴 시기 : 변수가 선언된 특정 함수 내부 종료

        • 특정 함수 내부에서만 사용되므로 함수가 실행 중일때만 메모리를 차지

        • 특정 함수가 종료가 되면 지역변수도 함께 파괴

      • 생성되는 기억 장소 : 스택(Stack)

        • 프로그램 실행중에 생성, 파괴를 반복하므로 스택에 생성

        • 스택에 생성되기 때문에 통용 범위가 국한되고 종료되면 같이 사라짐

        • 스택(Stack)

          • 지역변수, 인수, 함수 실행 후 돌아갈 번지 등이 스택에 생성되었다가 사라졌다가를 반복

      • 초기화 : 초기화되지 않음

        • 별도의 초기식이 없을 경우 초기화되지 않음

        • 초기값을 명시적으로 지정

        • 지역변수가 생성된 스택 위치의 값이 그대로 출력

        • 스택에 어떠한 값이 들어있는지 예측할 수 없는 쓰레기값이 존재

      • 장점

        • 함수의 독립성 높임

        • 디버깅 효울 향상

        • 메모리 절약

        • 재귀 호출이나 상호 호출 같은 특별한 기법에서 필요


  1. 정적(Static)

    • 정적 변수(Static variable)

      • 기억장소는 전역적이고 통용범위는 지역적인 정적 변수

        • 선언 위치 : 함수의 선두

        • 통용 범위 : 함수 내부

        • 생성되는 기억 장소 : 정적 데이터 영역

        • 초기화 : 0 으로 초기화

          • 단 한번의 초기화

          • 정적 변수가 선언된 함수가 여러번 호출되더라도 초기화는 프로그램 생성할 때 한번만 초기화

    • 정적 함수(Static method)

      • 기억장소는 전역적이고 통용범위는 지역적인 정적 함수

      • 해당함수는 현재 파일 내에서만 사용

        • Internal linkage : 정의된 파일 내에서만 사용 가능

      • extern 키워드를 사용하더라도 외부 파일에서 해당변수 참조 불가능


  1. 외부 변수(External variable)

    • 외부 변수(External variable)

      • 함수의 어느 곳에서든지 선언될 수 있으며 프로그램의 어느 부분에서 사용될수 있는 변수

      • 선언된 이후 모든 함수에서 사용할 수 있는 변수

      • 초기화 : 0으로 초기화

      • 주로 파일간에 변수를 공유할 목적으로 이용


  1. 레지스터(Register)

    • 레지스터(Register)

      • CPU를 구성하는 부품 중 하나

      • CPU가 데이터를 처리하기 위해 사용되는 임시 작업장

      • 속도는 매우 빠름

      • 크기 : CPU의 비트수를 결정하는 중요한 기준

    • 레지스터 변수(Register variable)

      • 저장할 수 있는 변수 타입

        • int, unsigned, 포인터 형 등의 32비트형(32비트 일 경우)

      • 레지스터 변수는 두 개까지만 선언 가능

        • 만약 세 개 이상의 레지스터형 변수 선언시, 최초 두개의 레지스터 변수만 레지스터형이 되고 나머진 지역변수로 됨

        • CPU의 레지스터 개수가 많지 않기 때문에 레지스터형 변수 2개만 선언

      • 레지스터 변수는 지역변수에만 지정 가능

        • 레지스터는 한정된 자원이기 때문임

      • 빠른 속도를 얻기 위해 레지스터 변수를 사용

      • 대규모의 루프를 돌린다거나 할 때, 루프 제어 변수를 레지스터형으로 선언

        • 이 변수의 읽기, 증감 속도가 빨라지거나 전체 루프의 실행속도 빨라짐

      • & 연산자 사용 불가

        • 레지스터형 변수는 메모리에 생성되는 것이 아니기 때문에 사용 불가

        • CPU 내부에 있기 때문에 번지를 가지지 않으므로 &연산자로 이 변수의 메모리 주소 조사 불가능

      • * 연산자 사용 가능


  1. 프로그램(Program)

    • 프로그램 구성(Code, Data, Heap, Stack register)

      • 코드(Code)

        • 프로그램의 코드 자체를 구성하는 명령이나 기계어 명령이 존재

        • read-only 권한이므로 이곳에 데이터를 쓰려면 access violation 일어남

        • CPU가 읽어 들여 수행하므로 text라 부름

      • 데이타(Data)

        • 전역변수, 정적변수, 초기화된 배열과 그 구조들이 저장되는 영역

        • 프로그램이 시작될때 생성되고 프로그램이 종료 될 때 시스템에 반환

      • (Heap)

        • 프로그래머가 필요에 의해 동적으로 할당하는 메모리가 위치하는 영역

        • C++(또는 JAVA)에서 new, C에서는 malloc으로 할당

        • C 또는 C++에서는 할당된 메모리 해제 필수

        • JAVA에서는 자동으로 가비지콜렉션(Garbage collector)에 의해 자동 해제

        • 프로그램은 기본적으로 1MB 크기의 힙 영역을 할당

      • 스택(Stack)

        • 지역변수, 매개변수 및 복귀번지 등등 저장되는 영역

        • 함수 호출시 스택 영역에 생성되고 사용된 후 시스템에 반환

        • 함수 인자(Argument)를 보낼때는 인수를 역순으로 보낸 뒤 복귀 번지를 저장 → 선입후출(First In Last Out)

        • 쓰레드(Thread) 1개씩 생성

        • 기본 크기는 1MB이며, 용량 초과시 오버플로우(Stack overflow)발생

    • 코드, 데이타, 힙 영역은 하위 메모리 부터 할당

      • 데이타 영역 : 컴파일 타임(compile-time) 때 결정

        • compile-time에 데이터 영역 및 스택의 크기를 계산해서 필요한 메모리 공간의 정보를 파일에 함께 갖음

      • 힙 영역 : 런타임(run time)시 요구할 때마다 사용

    • 스택 영역은 상위 메모리 부터 할당

'Education > C++ programming' 카테고리의 다른 글

Compiler  (0) 2012.01.13
리눅스 c++ 컴파일  (2) 2009.11.24
Triangle & Rectangle program code  (0) 2009.11.24
피보나치 수열  (2) 2009.11.24
Posted by 초상큼발랄
l