02.03 - 변수 크기와 sizeof 연산자
메모리는 일반적으로 바이트(byte) 크기 단위로 구성되며, 각 단위는 고유한 주소를 가진다. 지금까지 메모리를 변수의 이름을 통해 정보를 넣고 가져올 수 있는 메일 박스처럼 생각했다.
그러나 변수는 보통 메모리를 1byte 이상 차지한다. 변수는 2byte, 4byte 또는 8byte 이상 연속적인 메모리 주소를 사용할 수 있다. 변수가 사용하는 메모리의 양은 자료형에 따라 다르다.
변수가 얼마나 많은 메모리를 차지하는지를 아는 것은 매우 유용하다.
첫째, 변수가 더 많은 메모리를 차지할수록 더 많은 정보를 저장할 수 있다.
각 비트(bit)는 0 또는 1의 정보만을 가지기 때문에 1bit가 가질 수 있는 값의 경우의 수는 2개다.
2bit가 가질수 있는 값의 경우의 수는 4개다.
3bit가 가질수 있는 값의 경우의 수는 8개다.
일반적으로 n bit를 갖는 변수가 가질 수 있는 값의 경우의 수는 2^n개다. 8 bit의 경우 256(2^8)개가 된다.
변수의 크기는 저장할 수 있는 정보의 양을 제한한다. 더 많은 byte를 사용하는 변수는 더 넓은 범위의 값을 가질 수 있다.
둘째, 컴퓨터가 사용 가능한 메모리양은 한정되어 있으므로, 자료형에 따른 변수 크기가 중요하다.
많은 양의 메모리가 필요한 프로그램의 경우 1byte와 8byte 변수 사용에 차이가 난다.
C++ 기본 자료형의 크기
자료형에 따라 얼마나 많은 메모리를 차지할까? 자료형의 크기는 컴파일러 또는 컴퓨터 아키텍처에 의존한다.
C++은 기본 자료형이 최소 크기를 갖도록 보장한다.
변수의 실제 크기는 컴퓨터에 따라 다를 수 있다. 특정 시스템에서 자료형의 크기를 결정하기 위해 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;
이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/23-variable-sizes-and-the-sizeof-operator/ 입니다.