소년코딩

02.03 - 변수 크기와 sizeof 연산자

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

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

변수가 얼마나 많은 메모리를 차지하는지를 아는 것은 매우 유용하다.

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

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

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

 2-Bit

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

3-Bit

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

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

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

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


C++ 기본 자료형의 크기

자료형에 따라 얼마나 많은 메모리를 차지할까? 자료형의 크기는 컴파일러 또는 컴퓨터 아키텍처에 의존한다.

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

TypeSize

변수의 실제 크기는 컴퓨터에 따라 다를 수 있다. 특정 시스템에서 자료형의 크기를 결정하기 위해 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 2017에서는 아래와 같이 출력한다.

bool:           1 bytes
char:           1 bytes
wchar_t:        2 bytes
char16_t:       2 bytes
char32_t:       4 bytes
short:          2 bytes
int:            4 bytes
long:           4 bytes
long long:      8 bytes
float:          4 bytes
double:         8 bytes
long double:    8 bytes

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

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

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

// x is 4 bytes

cpp 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/23-variable-sizes-and-the-sizeof-operator/ 입니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기