공부중

[C/C++] 자료형의 크기에 대하여.. 본문

Programing/C, C++

[C/C++] 자료형의 크기에 대하여..

곤란 2021. 2. 24. 22:17
반응형

 

2012/12/04 - [Programing/C, C++] - [VS2012] 64bit 에서의 int

 

[VS2012] 64bit 에서의 int

64bit 시스템을 드디어 사용해본 나로서는 제일 궁금했던 int의 크기 변환을 눈으로 확인해보고 싶었다. 대충 크기를 확인해 보기 위해 짜보았다. #include int main() { std::cout<<"int의 크기"< return 0; } 출

hannom.tistory.com

2013/01/11 - [Programing/C, C++] - [VS2012] 64bit에서의 int - 2

 

[VS2012] 64bit에서의 int - 2

int의 크기가 64bit OS에 맞춰서 변할 줄 알았는데 int의 크기는 똑같다는 결과가 나왔었다 하지만 주소의 크기는 변했을꺼라 믿고 다시 Visual Studio 2012를 켯다. 소스코드는 다음과 같다. #include int mai

hannom.tistory.com

 

정말 오래전 과거에 두개의 글을 올린적이 있었다.

이것에 대한 호기심은 과거에 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

 

Fixed width integer types (since C++11) - cppreference.com

int8_tint16_tint32_tint64_t(optional) signed integer type with width of exactly 8, 16, 32 and 64 bits respectivelywith no padding bits and using 2's complement for negative values(provided only if the implementation directly supports the type) (typedef) [e

en.cppreference.com

 

 

추가로 검색하다보니 아래와 같은 자료도 찾을수 있었다.

dojang.io/mod/page/view.php?id=737

 

C 언어 코딩 도장: 85.3 데이터 모델

C 언어의 정수 자료형은 운영체제, CPU(플랫폼)에 따라 같은 short, int, long이라 하더라도 크기가 달라집니다. 다음은 각 데이터 모델별 정수 자료형의 크기(비트)입니다. S는 short, I는 int, L은 long, LL

dojang.io

 

반응형

'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