C++

Type size in Memory

개발자 동찬 ㅣ 2023. 11. 2. 21:03

# 목표

 

Cpp 에서 각 변수 마다 메모리를 어떻게 allocation (할당) 되는지 알아보는 시간을 가진다.

 

시작하기 전, 변수에 대한 내용을 정리하고 시작 하겠다.

 

# 변수

 

1. 실제 메모리는 Stack 구조로 쌓인다.

2. 변수에 접근하는 방법은 탑 위치 ( Stack의 맨위) 에서 몇 번째 떨어져있는지 확인 하며 변수의 위치 확인

2-1. Low level로 설명하면 격자 같이 메모리에 저장된다. 

 

# 변수의 주소값을 확인하는 코드

 


 

# 내용

 

이번 내용에서는 메모리의 크기 (size)가 어떻게 할당 되는지 확인해본다.

 

일단 1 바이트는

 

1 byte  = 8 bit

int = 4 byte

 

Cpp의 sizeof() 함수는 해당되는 변수나 자료형의 크기를 바이트 단위로 반환한다.

 

 

다른 자료형의 크기는 해당 사이트를 참조 한다.

 

  •  Cpp referece.com

https://en.cppreference.com/w/cpp/language/types

 

Fundamental types - cppreference.com

(See also type for type system overview and the list of type-related utilities that are provided by the C++ library) [edit] Void type void — type with an empty set of values. It is an incomplete type that cannot be completed (consequently, objects of typ

en.cppreference.com

 

위 표를 보면 int 와 unsigned int 의 크기는 at least 16이라고 표기 되어 있다.

 

이는 컴파일러 혹은 개발 환경 마다 크기가 달라질 수 있다는 것을 의미 한다.

 

실무에서는 변수의 크기를 할당 함에 있어서 엄격해야하기 때문에 다음과 같은 방법을 사용한다.

 

 

static_assert() 함수를 이용하면 파라미터의 내용이 참일 경우 정상적으로 컴파일 된다.

 

int 형의 크기가 4 byte 이기 때문에

 

해당 코드는 컴파일이 정상적으로 이루어 진다.

 

하지만, 다른 컴파일러 일 경우 동작하지 않을 수 있다.

 

 

 

 

컴파일러의 종류와 상관없이 엄격하게 메모리 관리를 해야하는 경우

 

int8_t ( 1바이트)

int64_t  (8바이트)

 

데이터 타입을 사용할 수 있다.

 

이 두개의 데이터 타입은 std 의 array에서도 활용 가능 하다.

 

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

변수와 메모리  (1) 2023.11.03
Vector Container  (0) 2023.10.11
표준 템플릿 라이브러리 STL  (0) 2023.10.11
C/C++  (0) 2023.10.11
객체 지향 프로그래밍  (0) 2022.09.13