본문 바로가기
프로그래밍/키워드 정리

[C++] 복습용 키워드 정리 - 1

by Sik.K 2023. 3. 8.

아직 포스팅을 올리지 못했지만 한 달 프로젝트인 포켓몬스터 모작을 어렵사리 끝내어 이제 다시 공부의 시간이 돌아왔다.

 

단순히 어떤 공부를 할까를 고민하다가 문득 키워드 정리를 해야겠다 싶어 글을 작성하기 시작했다.

 

하루에 5 ~ 10개 정도의 키워드를 정리하여 포스팅을 올릴 생각이다.

 

 

<변수>

지역 변수 - 스택 메모리에 저장되며 선언된 블록(스코프)에서만 사용이 가능한 변수, 블록이 소멸됨과 동시에 같이 사라진다.

 

전역 변수 - 선언된 cpp 내부에서 사용이 가능한 변수, 이를 다른 cpp와 공유하기 위해서는 extern이라는 키워드를 붙여 선언하여야 한다.

 

동적 변수 - 런타임 도중 공간이 할당되는 변수로 주로 포인터 타입의 변수에 할당과 동시에 주소가 입력되며 c에서는 malloc 함수, c++에서는 new라는 키워드를 사용해 공간을 할당하고, 소멸에는 c에선 free 함수, c++에선 delete라는 키워드를 통해 할당을 해제한다.

 

<메모리 구조>

 

컴퓨터는 0과 1의 두 가지 숫자로 모든 값을 저장한다. 이 값들은 메모리에 저장이 되는데 이 메모리는 크게 4가지 영역으로 나뉜다.

 

코드 영역 - 프로그래머가 작성한 소스코드가 들어가는 부분, 실행할 프로그램의 코드가 들어가는 부분으로 텍스트 영역이라고도 한다. 코드 영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 저장된다.

 

데이터 영역 - 전역변수와 static 변수가 할당되는 영역, 프로그램 시작과 동시에 할당되고 종료되는 시점에 메모리 영역이 소멸된다.

 

스택 영역 - 프로그램이 자동으로 사용하는 영역으로 임시 메모리 영역이다. 함수 및 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 곳으로 함수가 소멸하면 같이 소멸된다. 힙 영역보다 빠른 속도를 가진다. 후입선출(Last In First Out)의 구조를 가진다.

 

힙 영역 - 프로그래머가 할당과 해제를 담당하는 메모리 공간이다. Python이나 Java의 경우 가비지 컬렉터가 자동으로 해제를 담당한다. c++의 경우 힙 영역에 저장한 메모리 값을 프로그래머가 해제하지 않을 경우 메모리에 계속 남게 된다. 스택 영역보다 느린 속도를 가지지만 더 많은 공간을 할당할 수 있다.

 

스택 영역과 힙 영역은 사실 같은 공간을 사용한다. 힙 영역이 메모리 위쪽 주소부터 할당이 되면 스택은 아래에서부터 할당되며 올라온다. 때문에 두 영역이 서로의 공간을 침범하는 경우가 발생하여 에러가 나게 되는데 이를 각각 HEAP OVERFLOW, STACK OVERFLOW라고 칭한다.

 

마찬가지로 같은 공간을 사용하기 때문에 스택 영역이 클수록 힙 영역이 작아지고 반대의 경우도 마찬가지가 된다.

 

<Static>

 

특정 지역 변수를 static으로 선언하게 되면 이 변수는 전역 변수와 비슷한 성격을 가지게 된다. 함수가 호출되고 이후 값이 증가되었다면 함수 소멸 후, 다시 함수가 호출될 시 변수에 저장된 값은 처음 값이 아닌 이전 함수에서 증가했던 값으로 나타난다. static 변수는 메모리 공간의 데이터 영역에 저장이 되고, 프로그램 실행 시 공간이 할당되었다가 종료와 동시에 해제가 된다.

 

이 static 변수는 클래스 내부의 멤버변수로도 사용이 가능한데, 이 경우 static 변수를 사용하는 클래스로 생성된 모든 객체가 같은 값을 공유하게 된다.

 

그리고 클래스 내부에 선언된 static 변수의 초기화는 클래스 내부에서 할 수 없고 전역으로 해주어야 한다.

 

 

댓글