일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- softeer
- 프로그래머스
- Frustum
- 팰린드롬 만들기
- RVO
- IFileDialog
- UnrealEngine4
- RootMotion
- algorithm
- NRVO
- C++
- UE5
- 백준
- GeeksForGeeks
- 티스토리챌린지
- UnrealEngine5
- 오블완
- DeferredRendering
- 1563
- const
- DirectX11
- winapi
- C
- Programmers
- 언리얼엔진5
- directx
- Unreal Engine5
- baekjoon
- 2294
- 줄 세우기
- Today
- Total
Game Develop
[c++] 자료형 크기 본문
int나 long 같은 경우, 플랫폼마다 크기가 다를 수 있으므로 헷갈릴수도있다.
본 글은 윈도우 64bit를 기준으로한다.
직접 내 컴퓨터에서 출력찍어봐야 마음이 편하기때문에 직접 찍어봤다.
일단 VisualStudio에서 64bit로 빌드했을 시의 자료형크기.
운영체제가 64bit일 경우, 다른 OS는 long자료형의 크기가 8바이트지만 예외적으로 윈도우즈는 4바이트 그대로라고 한다.
아래는 32bit로 빌드했을 때의 자료형 크기.
포인터 크기만 다른걸 확인할 수 있따.
포인터는 메모리 위치를 가리키기 위한 주소를 담는 변수다. 만약 32비트 시스템이라면 CPU의 메모리 접근을 위한 주소가 32비트 만큼 가능하기 때문에 포인터도 32비트(4바이트)가 된다. 반면, 64비트 시스템이라면 64비트(8바이트) 만큼 가능하기 때문에 포인터도 64비트(8바이트)가 된다.
일단 Window 64비트와 32비트의 차이는 CPU가 처리하는 데이터의 최소 단위인 레지스터의 비트개수를 나타낸다.
그러니까 32비트 운영체제는 32 비트의 데이터를 계산, 처리할 수 있고 64비트 운영체제는 64비트의 데이터를 계산, 처리할 수 있다는 의미이다.
하지만 운영체제가 64비트라면 CPU도 64비트를 지원해야한다. 하지만 요즘 CPU는 거의 대부분 64비트를 지원하기때문에 상관없다.
이때 한가지 의문점이 생긴다.
64비트 윈도우 환경에서 32비트 윈도우에서 만든 응용프로그램이 문제 없이 잘 돌아갈까? 32비트 윈도우에서 만든 프로그램은 바이너리 코드가 32비트 운영체제와 32비트 프로세서에 맞춰 컴파일러에 의해 번역되었을테고 CPU가 계산하는 비트 수가 32비트일텐데 여러가지 문제가 생길 것 같지 않은가? 하지만 문제 없이 돌아간다.
64비트 윈도우는 WoW64(Window 32 On Window 64)라는 시스템이 탑재되어있는데 이 WoW64는 운영체제의 하위 시스템으로 모든 64비트 버전의 마이크로소프트 윈도우에서 32비트 응용 프로그램들이 돌아가도록 도와준다.
그래서 윈도우 64비트에서 32비트 응용프로그램은 자신이 윈도우 32비트 환경에 있는 걸로 착각하고 실행이 된다.
윈도우 32비트에서 윈도우 64비트로 넘어가게 된 사연을 읊어보자면 아까 CPU가 계산하는 비트 수가 32비트라고 했는데 이는 2^32까지의 수만 계산 할 수 있다는 소리이다.
프로그램이 실행되려면 프로그램이 메인 메모리에 올라간 뒤에 CPU가 메모리 내에 있는 명령문을 불러와서 계산하고 동작해야 프로그램이 실행되는 것이다.
그리고 메인 메모리에 저장 된 명령문을 불러오려면 메인 메모리 내의 어느 위치에 어떤 명령문을 불러와야 할 지 결정해야하는데 그 위치를 담당하는게 메모리 주소다.
따라서 특정 위치에 있는 명령문을 불러오려면 그 메모리 위치의 주소를 가져와야하는데 CPU가 계산할 수 있는 비트 수가 32비트이므로 2^32 = 4294967296개의 주소공간을 가리킬 수 있으므로 4294967296BYTE = 4GB 까지의 메모리만 인식이 가능하다.
따라서 그 이외에 추가를 해도 윈도우 내에서 사용할 수 있는 메모리 크기는 4GB이고 요즘 시대에 4GB 메모리로는 여러 프로그램을 돌리는 게 한계가 있다.
그리고 CPU가 데이터를 64 비트 단위로 한번에 처리하면 32 비트를 처리하는 CPU 보다 이론 적으론 2배 빠르므로 64 비트 운영체제로 넘어가게 되었다.
출처 : https://psyhm.tistory.com/3
물론 32bit프로그램도 64bit에 돌리는 방법이 있기는 하다고한다. wow64를 이용하면 된다고한다.