-
변수(Variable)
-
전역변수(Global variable)
-
선언 위치 : 함수 바깥에서 선언
-
통용 범위 : 프로그램 전체가 공유
-
선언된 위치 이후에는 어디서든지 이 변수를 사용 가능
-
-
파괴 시기 : 프로그램과 동일
-
-
-
실행 직후에 생성되어 프로그램이 실행되는 동안에는 계속 메모리를 차지하고 있으며 프로그램이 종료되면 파괴됨
-
생성되는 기억 장소 : 정적 데이터 영역
-
한번 정해진 메모리 위치에 계속 남아 있어야하므로 정적 데이터 영역에 생성
-
정적 데이터 영역 (페이지 참조)
-
프로그램 코드 바로 다음에 위치하는 실행 파일의 한 부분으로 프로그램이 실행될 때 메모리롤 로드되어 실행 중에 계속 유지
-
-
-
초기화 : 0 으로 초기화
-
별도의 초기식이 없더라도 0으로 초기화
-
초기화와 소멸은 임의의 순서대로 이뤄짐
-
-
지역변수(Local variable)
-
선언 위치 : 함수 내부에서 선언
-
통용 범위 : 자신이 선언된 함수
-
자신이 선언된 함수에 소속되어 있기 때문에 함수 외부에서는 이 변수 사용 불가
-
-
파괴 시기 : 변수가 선언된 특정 함수 내부 종료
-
특정 함수 내부에서만 사용되므로 함수가 실행 중일때만 메모리를 차지
-
특정 함수가 종료가 되면 지역변수도 함께 파괴
-
-
생성되는 기억 장소 : 스택(Stack)
-
프로그램 실행중에 생성, 파괴를 반복하므로 스택에 생성
-
스택에 생성되기 때문에 통용 범위가 국한되고 종료되면 같이 사라짐
-
스택(Stack)
-
-
-
지역변수, 인수, 함수 실행 후 돌아갈 번지 등이 스택에 생성되었다가 사라졌다가를 반복
-
초기화 : 초기화되지 않음
-
별도의 초기식이 없을 경우 초기화되지 않음
-
초기값을 명시적으로 지정
-
지역변수가 생성된 스택 위치의 값이 그대로 출력
-
스택에 어떠한 값이 들어있는지 예측할 수 없는 쓰레기값이 존재
-
-
장점
-
함수의 독립성 높임
-
디버깅 효울 향상
-
메모리 절약
-
재귀 호출이나 상호 호출 같은 특별한 기법에서 필요
-
-
정적(Static)
-
정적 변수(Static variable)
-
기억장소는 전역적이고 통용범위는 지역적인 정적 변수
-
선언 위치 : 함수의 선두
-
통용 범위 : 함수 내부
-
생성되는 기억 장소 : 정적 데이터 영역
-
초기화 : 0 으로 초기화
-
-
-
-
단 한번의 초기화
-
정적 변수가 선언된 함수가 여러번 호출되더라도 초기화는 프로그램 생성할 때 한번만 초기화
-
정적 함수(Static method)
-
기억장소는 전역적이고 통용범위는 지역적인 정적 함수
-
해당함수는 현재 파일 내에서만 사용
-
Internal linkage : 정의된 파일 내에서만 사용 가능
-
-
extern 키워드를 사용하더라도 외부 파일에서 해당변수 참조 불가능
-
-
외부 변수(External variable)
-
외부 변수(External variable)
-
함수의 어느 곳에서든지 선언될 수 있으며 프로그램의 어느 부분에서 사용될수 있는 변수
-
선언된 이후 모든 함수에서 사용할 수 있는 변수
-
초기화 : 0으로 초기화
-
주로 파일간에 변수를 공유할 목적으로 이용
-
-
-
레지스터(Register)
-
레지스터(Register)
-
CPU를 구성하는 부품 중 하나
-
CPU가 데이터를 처리하기 위해 사용되는 임시 작업장
-
속도는 매우 빠름
-
크기 : CPU의 비트수를 결정하는 중요한 기준
-
레지스터 변수(Register variable)
-
저장할 수 있는 변수 타입
-
int, unsigned, 포인터 형 등의 32비트형(32비트 일 경우)
-
-
레지스터 변수는 두 개까지만 선언 가능
-
만약 세 개 이상의 레지스터형 변수 선언시, 최초 두개의 레지스터 변수만 레지스터형이 되고 나머진 지역변수로 됨
-
CPU의 레지스터 개수가 많지 않기 때문에 레지스터형 변수 2개만 선언
-
-
레지스터 변수는 지역변수에만 지정 가능
-
레지스터는 한정된 자원이기 때문임
-
-
빠른 속도를 얻기 위해 레지스터 변수를 사용
-
대규모의 루프를 돌린다거나 할 때, 루프 제어 변수를 레지스터형으로 선언
-
이 변수의 읽기, 증감 속도가 빨라지거나 전체 루프의 실행속도 빨라짐
-
-
& 연산자 사용 불가
-
레지스터형 변수는 메모리에 생성되는 것이 아니기 때문에 사용 불가
-
CPU 내부에 있기 때문에 번지를 가지지 않으므로 &연산자로 이 변수의 메모리 주소 조사 불가능
-
-
* 연산자 사용 가능
-
-
프로그램(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 |