따..딱히 공부하려고 포스팅하는 건 아니니까..!
변수와 메모리공간 본문
1. 변수
|
저장 영역 |
외부 소스 접근 여부 |
함수 내 선언 | 특징 |
전역변수 |
데이터 |
O |
X | 정의를 한 번만 할수 있다 |
정적변수 |
데이터 |
X |
X | 자료형 앞에 static을 붙인다 |
지역변수 |
스택 |
X |
O | 함수가 살아있는 동안에만 변수가 존재 |
정적 전역변수 |
데이터 |
X |
X | 전역변수이지만 외부 소스에서 접근 불가 |
정적 지역변수 |
데이터 |
X |
O | 함수를 빠져나와도 변수에 저장된 값이 사라지지 않는다 |
const : 자기 자신의 왼쪽에 있는 것을 상수화 (단, 가장 왼쪽에 있을 때에는 오른쪽을 고정한다)
ex) 'const int *const ptr' 이면, 'int, *' 을 상수화(고정)한다.
extern : 함수에 붙여주면 외부에 공개가 된다. 즉, 외부 소스에서 접근 허용이 가능하다.
(extern 는 어딘가에 존재하는 전역변수라는 의미, 보통 C 표준라이브러리에 저장된다.)
static : 전역 인자로 취급이 되지만 선언된 영역에서만 호출이 가능하다.
(지역이 사라져도 변수가 유지되어야 되는 성질을 보완하기 때문에 전역 인자로 취급)
Tip. a++와 ++a의 차이점 |
a = 2 일때, 1) b = a++ 이면, a값이 저장되고 a가 증가된다. 즉 결과값 = 2 2) b = ++a 이면, a가 증가되고 a값이 b에 저장된다. 즉 결과값 = 3 (값을 단순증가시킬 때 사용) |
2. 메모리 공간
코드(Code)
실행코드가 들어 있는 곳
데이터(Data)
초기화된 전역변수나 정적변수를 저장
BSS(Block Started by Symbol)
초기화되지 않은 or 0이나 NULL으로 초기화된 전역변수나 정적변수를 저장
힙(Heap)
malloc / free 등으로 실행시간시 할당되는 메모리 공간용 (동적 메모리 할당용)
스택(Stack)
임시 저장용, 주로 함수에 대한 내용을 저장할때 사용 (지역변수, 매개변수, 반환값 등)
'C/C++' 카테고리의 다른 글
추상화(Abstraction) (0) | 2015.02.05 |
---|---|
컴파일과 링크 (0) | 2014.12.30 |
#define보다 const가 더 유용한 이유 (0) | 2014.12.09 |
포인터(Pointer)와 레퍼런스(Reference) (0) | 2014.12.09 |
객체지향 프로그래밍과 절차지향 프로그래밍 (0) | 2014.12.02 |