공부중
[C/C++] 자료형의 크기에 대하여.. 본문
2012/12/04 - [Programing/C, C++] - [VS2012] 64bit 에서의 int
2013/01/11 - [Programing/C, C++] - [VS2012] 64bit에서의 int - 2
정말 오래전 과거에 두개의 글을 올린적이 있었다.
이것에 대한 호기심은 과거에 64bit OS들이 지금처럼 쓰이질않았고 고대(?)의 선배에게 들었을때 int의 크기가 32bit OS에 오면서 변했듯이 64bit OS에 본격적으로 접어들면 int의 크기는 변할수 있다라는 이야기를 들었기 때문에 위와같은 글을 썼었다.
동작시키려는 코드는 아래와 같다.
#include <iostream>
int main()
{
std::cout << sizeof(bool) << std::endl;
std::cout << sizeof(char) << std::endl;
std::cout << sizeof(short) << std::endl;
std::cout << sizeof(int) << std::endl;
std::cout << sizeof(long) << std::endl;
std::cout << sizeof(long long) << std::endl;
std::cout << sizeof(float) << std::endl;
std::cout << sizeof(double) << std::endl;
std::cout << sizeof(long double) << std::endl;
return 0;
}
일단 현재 Windows에서 MSVC의 결과를 보자
과거 XP, 7 에서 32bit OS와 다를것이 없어보인다.
그렇다면 과거에 int크기가 현재의 크기보다 작았다는것은 사실일까 해서
과거의 컴파일러(?) Turbo-C를 구해서 돌려보았다.
실제 도스가 돌아가는 머신은 구할수가 없어서 위와같은 방법으로 돌려보았다.
결과는 int 사이즈는 2byte로 되어있었고 재미있었던 부분은 long long과 long double이었다.
그리고 추가로 돌려본 컴파일러는 g++이었다 코드와 결과는 아래와 같다.
MSVC와 비교했을때 long의 사이즈와 long double의 사이즈가 변한것을 볼수 있었고 int는 똑같이 4byte를 사용하는걸 볼 수 있었다.
리눅스 머신이 무슨이유인지 뻗어버려서 cygwin을 통해서 한게 아쉽긴 했지만 그래도 같은 결과가 나올것이라 생각한다.
여담이긴 하지만 안드로이드에서 네이티브코드를 사용해 한번 출력해 보았다.
코드와 결과는 아래와 같다.
습작으로 연습하던 프로젝트에 급하게 작성한거라 결과물이 더럽긴 하지만
네이티브코드에서 출력되는것을 그대로 전달받아 View에 띄워주고 있다.
(첨에 64bit옵션을 깜빡하고 안했다가 추가했다)
결과로 int는 똑같은 4byte를 사용하고 있고 long과 long long, long double은 각각 8, 8, 16을 사용하고 있다.
과거에 int의 크기가 변한것은 사실이나 현재에는 int의 크기는 변하지 않았고 long붙은것들(?)이 변했다.
왜 이렇게 변했는지?는 잘은 모르겠지만 여러 플랫폼을 위한 코드를 사용하기 위해서는
고정 너비 자료형을 사용하는게 좋을것 같다.
en.cppreference.com/w/cpp/types/integer
추가로 검색하다보니 아래와 같은 자료도 찾을수 있었다.
dojang.io/mod/page/view.php?id=737
'Programing > C, C++' 카테고리의 다른 글
[MSVC]디버깅중 외부코드 표시 (0) | 2021.04.21 |
---|---|
[C/C++] 구조체의 크기 (0) | 2021.03.15 |
[C/C++] 정수와 실수의 표현방식 (0) | 2021.02.24 |
[C++] 전위/후위 증가/감소 연산자 (0) | 2020.11.18 |
[C++] Lvalue Rvalue (0) | 2020.11.17 |