C++) 07.const, 메모리 구조

2021. 3. 8. 18:59C++

728x90

이번에는 상수와 메모리 구조에 관해 알아보겠습니다.

 

●상수

- 한번 정해지면 절대 바뀌지 않을 값들

- constant의 약자인 const를 붙임 (변수를 상수화)

- const가 붙으면 반드시 초기값을 지정해야 함

 

상수는 다양한 하드 코딩된 상태에서 유용하게 사용될 수 있습니다.

 

비트 플래그를 예로 들어보겠습니다.

 

4가지 상태를 상수로 지정한 후

 

상태를 상수로 지정하게 되면 직접 숫자를 쓰지 않을 수 있습니다.

 

그리고 만약 다른 상태가 추가된다 하여도 모든 숫자를 바꾸지 않고 상수의 값만 다르게 지정해주면 되기 때문에 수정에 있어서도 용이하게 사용될 수 있습니다.

 


다음은 메모리 구조에 대해 알아보겠습니다.

 

출처 http://www.tcpschool.com/c/c_memory_structure

스택 영역은 간단히 말해 C++각각의 함수 안에서 정의된 변수를 저장합니다.

 

그리고 스택 영역에 저장된 변수를 지역변수, 매개변수라 하고 함수 호출이 끝나게 되면 지역변수와 매개변수는 소멸하게 됩니다.

 

데이터 영역은 .data영역, .bss영역, .rodata영역으로 나뉘는데

-. data영역 : 변수를 초기화한 상태 저장

-. bss영역 : 변수를 초기화하지 않은 상태 저장

-. rodata : const char*와 같이 읽기 전용 데이터 저장

으로 나뉠 수 있습니다.

 

힙 영역은 사용사가 데이터를 동적으로 할당할때 저장되는 공간입니다. 스택 영역에서는 함수 호출이 끝나면 자연스레 데이터가 소멸하지만 힙 영역에서는 사용자가 직접 동적 할당을 해제해주어야 데이터가 소멸하게 됩니다. 따라서 동적 할당을 해제해주지 않으면 메모리가 누수되는 memory leak현상이 발생하기 때문에 이 부분은 신경 써서 작성해 주셔야 합니다.

 

따라서 변수를 어디에 어떻게 정의하냐에 따라 코드가 크게 달라질 수 있기 때문에 변수를 선언할 때에 주의를 기울여야 한다는 것을 알 수 있습니다.

728x90

'C++' 카테고리의 다른 글

C++) 09. 반복문  (0) 2021.03.11
C++) 08. 분기문  (0) 2021.03.09
C++) 06. 비트 연산과 비트 플래그  (0) 2021.03.07
C++) 05. 비교, 논리 연산자  (0) 2021.02.17
C++) 04. 산술, 증감 연산자  (0) 2021.02.15