C++ 문법 공부

sizeof 연산자와 변수 크기

민봉이 2022. 2. 8. 22:23
반응형

sizeof 연산자와 변수 크기

메모리는 일반적으로 바이트(byte) 크기 단위로 구성되며, 각 단위는 고유한 주소를 가진다. 지금까지 메모리를 변수의 이름을 통해 정보를 넣고 가져올 수 있는 메일 박스처럼 생각했다.

그러나 변수는 보통 메모리를 1byte 이상 차지한다. 변수는 2byte, 4byte 또는 8byte 이상 연속적인 메모리 주소를 사용할 수 있다. 변수가 사용하는 메모리의 양은 자료형에 따라 다르다. 변수가 얼마나 많은 메모리를 차지하는지를 아는 것은 중요하다.

 1. 변수가 더 많은 메모리를 차지할수록 더 많은 정보를 저장할 수 있다.

각 비트(bit)는 0 또는 1의 정보만을 가지기 때문에 1bit가 가질 수 있는 값의 경우의 수는 2개다.

2bit가 가질수 있는 값의 경우의 수는 4개다.

bit 0 bit 1
0 0
0 1
1 0
1 1

3bit가 가질 수 있는 값의 경우의 수는 8개다.

bit 0 bit 1 bit 2
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

일반적으로 n bit를 갖는 변수가 가질 수 있는 값의 경우의 수는 2^n개다. 8 bit의 경우 256(2^8)개가 된다.

변수의 크기는 저장할 수 있는 정보의 양을 제한한다. 더 많은 byte를 사용하는 변수는 더 넓은 범위의 값을 가질 수 있다.

 

 2. 컴퓨터가 사용 가능한 메모리양은 한정되어 있으므로, 자료형에 따른 변수 크기가 중요하다.

많은 양의 메모리가 필요한 프로그램의 경우 1byte와 8byte 변수 사용에 차이가 난다.

 

C++ 기본 자료형의 크기

 자료형의 크기는 컴파일러 또는 컴퓨터 아키텍처에 의존한다.

 C++은 기본 자료형이 최소 크기를 갖도록 보장한다.

Category Type Minimum Size Note
boolean bool 1 byte  
character char 1 byte May be signed or unsigned
Always exactly 1 byte
  wchar_t 1 byte  
  char16_t 2 bytes C++11 type
  char32_t 4 bytes C++11 type
integer short 2 bytes  
  int 2 bytes  
  long 4 bytes  
  long long 8 bytes C99/C++11 type
floating point float 4 bytes  
  double 8 bytes  
  long double 8 bytes  

변수의 실제 크기는 컴퓨터에 따라 다를 수 있다. 특정 시스템에서 자료형의 크기를 결정하기 위해 C ++은 sizeof라는 연산자를 제공한다. sizeof 연산자는 자료형 또는 변수를 가지고 크기를 byte 단위로 반환하는 연산자다.

#include <iostream>

int main()
{
    std::cout << "bool:\t\t" << sizeof(bool) << " bytes" << std::endl;
    std::cout << "char:\t\t" << sizeof(char) << " bytes" << std::endl;
    std::cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << std::endl;
    std::cout << "char16_t:\t" << sizeof(char16_t) << " bytes" << std::endl;
    std::cout << "char32_t:\t" << sizeof(char32_t) << " bytes" << std::endl;
    std::cout << "short:\t\t" << sizeof(short) << " bytes" << std::endl;
    std::cout << "int:\t\t" << sizeof(int) << " bytes" << std::endl;
    std::cout << "long:\t\t" << sizeof(long) << " bytes" << std::endl;
    std::cout << "long long:\t" << sizeof(long long) << " bytes" << std::endl;
    std::cout << "float:\t\t" << sizeof(float) << " bytes" << std::endl;
    std::cout << "double:\t\t" << sizeof(double) << " bytes" << std::endl;
    std::cout << "long double:\t" << sizeof(long double) << " bytes" << std::endl;
    return 0;
}

x64 컴퓨터의 Visual Studio 2019에서는 다음과 같이 출력한다.

다른 아키텍처를 가진 컴퓨터 또는 다른 컴파일러에서는 결과가 다를 수 있다. 또한, void 자료형은 크기가 없으므로 sizeof 연산자를 사용할 수 없다.

변수 이름을 이용해 sizeof 연산자를 사용할 수도 있다.

#include <iostream>

int main()
{
	int x;
	std::cout << "x is " << sizeof(x) << " bytes" << std::endl;
}

 

 

 

 

출처: [소년코딩]

반응형