인프런 커뮤니티 질문&답변

m1n_q님의 프로필 이미지
m1n_q

작성한 질문수

홍정모의 따라하며 배우는 C언어

4.2 sizeof 연산자

size_t 에 관한 질문 드립니다

작성

·

943

0

size_t 가 시스템에 따라

32비트 : unsigned int 혹은

64비트 : unsigned long long 

이 될 수 있다고 이해했습니다.

정확한 정의가 궁금하여 찾아보았더니, 

'' 해당 시스템에서 어떤 객체, 값을 포함할 수 있는 최대 크기를 표현한다. ''

라고 하는데요.

이 정의가 맞나요?

이 정의가 맞다면, size_t가 unsigned int 를 반환하는 경우

해당 시스템의 자료형 최대 크기가 32비트인건지....

그렇다면 그 환경은 unsigned long long 이라는 자료형을 사용할 수가 없는 환경인건지.... 이해가 부족하여 질문드립니다.

답변 3

2

안녕하세요!

- 해당 정의 맞습니다. 

- 32bit 시스템 환경이라도 double, long long, unsigned long long 과 같은 8byte (=64bit) 크기의 자료형 사용할 수 있습니다.

32bit 환경에서 출력한 결과입니다. (상단의 x86 확인하실 수 있습니다. ) 이렇게 32bit 환경에서도 8byte 자료형 사용하실 수 있고 크기도 8 로 잘 나온 것을 확인할 수 있습니다.

size_t 의 정의를 조금 더 구체화하자면 현 시스템이 "한번에" 처리할 수 있는 최대 크기를 의미합니다. 32bit 환경에서는 8byte 자료형들을 4byte(=32bit) 크기의 레지스터를 2 개 이용해서 표현하는 등등 이런 방식으로 8byte 자료형을 표현한다고 합니다.

아래 링크에 32bit 시스템에서 8byte 자료형들이 구동되는 방식이 자세히 나와있습니다. 참고해주세요!

링크 1 : 32bit 시스템에서의 long long

링크 2 : 32bit 시스템에서의 double

0

네! 괜찮을 것 같습니다.

0

m1n_q님의 프로필 이미지
m1n_q
질문자

친절한 답변 감사드립니다! 말씀해주신대로라면, 해당 시스템이 처리할 수 있는 '기본단위' 의 최대 크기라는 느낌으로 이해를 해도 괜찮을까요?

m1n_q님의 프로필 이미지
m1n_q

작성한 질문수

질문하기