크기

2011-08-24 3 views
4

가능한 중복 :
Does the size of an int depend on the compiler and/or processor?크기

정수의 크기가 컴파일러 나 OS 또는 프로세서에 의존 하는가? 32 비트 OS 또는 64 비트 OS (이 경우 64 비트 OS 만)에서 실행중인 32 비트 OS 또는 64 비트 OS 모두에서 gcc를 사용하면 어떻게 될까요?

+1

http://stackoverflow.com/questions/2331751/does-the-size-of-an-int-depend-on-the-compiler-and-or-processor/2331835#2331835 –

답변

3

컴파일러에 따라 다릅니다 옵션.
물론 컴파일러 자체에 따라 다릅니다.
하지만, 컴파일러가 특정 OS 만들어하므로 프로세서에 의존 그래서, 컴파일러는 특정 프로세서를위한 제조 된 OS
및/또는
에 의존 하였다

+1

그렇다면 32 비트 머신과 64 비트 머신에서 실행되는 gcc의 크기가 달라질 것입니다. – 0x07FC

+0

그럴 수도 있습니다. 사용 된 옵션 (http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html)에 따라 다릅니다. – pmg

0

시스템에 따라 다릅니다. 그리고 시스템이란 프로세서와 운영 체제의 모든 조합을 의미하지만 일반적으로 사용중인 프로세서의 "자연"정수 크기에 바인딩됩니다.

+0

'int' 64 비트 인텔 시스템에서. 세 가지 주요 OS 인 Windows, Linux 및 OS X에서 int는 여전히 32 비트이지만 레지스터 크기는 64 비트입니다. 그러나'long int'의 크기는이 플랫폼에서 다릅니다. –

1

int, long 등의 크기는 컴파일러에 따라 다르지만 컴파일러 구현자는 특정 프로세서 및/또는 OS에 가장 적합한 크기를 선택합니다.

0

크기가 int이고 거의 모든 다른 유형이 C에서 정의됩니다. 특정의 컴파일러는 특정의 플랫폼상에서 보증을 실시 할 수 있습니다 만, 이것은 구현에 따라서 다릅니다. 절대 의존하지 않아도됩니다.

+0

이것은 어리석은 의미 지점 일 수 있지만 C에서 'int'의 크기는 * undefined *가 아닌 * 구현 정의 *입니다. 구현 정의는 구현이 선택과 일치해야하고 선택을 문서화해야 함을 의미하지만 undefined는 모든 베팅이 해제되고 컴파일러가 일관성없고 임의적으로 결정할 수 있음을 의미합니다. – templatetypedef

0

정수의 크기는 컴파일러, OS 또는 프로세서에서 나타 납니까?

예. 그것은 그러한 것들에 의존 할 수 있습니다.

실제로 컴파일러와 런타임 라이브러리에 의해 설정되는 플랫폼 ABI에 의해 정의되지만 컴파일러는 다른 OS 또는 아키텍처에서 다른 ABI를 사용합니다.

5

이 조합에 따라 컴파일러, 프로세서 및 OS

예를 들어 64 비트 Intel CPU의 경우 64 비트 모드에서 Windows의 long int 크기는 4 바이트이고 Linux 및 Mac의 경우 8 바이트입니다. int은 Intel의 세 OS 모두에서 4 바이트입니다.

컴파일러 구현 자도 선택의 여지가 있지만 대개 OS가 사용하는 것을 사용합니다. 그러나 세 플랫폼 모두에서 C 컴파일러를 사용하는 컴파일러 공급 업체가이 세 가지 모두에서 동일한 크기를 사용하기로 결정할 수 있습니다.

물론 int을 16 비트 CPU에서 4 바이트 (가능할 수도 있음)로 만드는 것은 의미가 없습니다.

그래서 세 가지 모두에 달려 있습니다.