2011-10-10 4 views
1

가능한 중복 :
Determine word size of my processorC에서 컴퓨터의 워드 크기를 계산하는 방법은 무엇입니까?

그것은 하나 개의 면접 질문 오늘입니다. 그러나 나는 몰랐다. ...

나는 면접자가 cpu의 단어 크기를 의미한다고 생각한다.


내가 이런 대답을 찾을 :

int cpu_bits(void *dummy1, void *dummy2) 
{ 
long offset = (long)&dummy2 - (long)&dummy1; 
int ret = 0; 
if (8 == offset) 
    ret = 64; 
else if (4 == offset) 
    ret = 32; 
else if (2 == offset) 
    ret = 16; 
else if (1 == offset) 
    ret = 8; 
else 
    ret = -1; 
return ret; 
} 

int main() 
{ 
printf("%d\n", cpu_bits(NULL, NULL)); 
return 0; 
} 

결과는 잘 될 것 같다, 그렇게 생각하십니까?

+6

인터뷰어에 ** 정확한 정의 **를 염두에두고 답변을 시작하겠습니다. – NPE

+0

@PaulR 단어 크기가 8 비트이면 어떻게됩니까? C에서 int는 항상 최소 16 비트입니다. – Juho

+0

@Juho : 네, 저의 대답을 철회했습니다. 그리고 그것에 대해 생각할 시간이 생겼습니다. ;-) –

답변

3

짧은 답변 : 기본 아키텍처의 워드 크기에 해당하는 보장 데이터 형식, 어떤 "워드 크기를 정의하지 않는 표준 "현대 CPU의 의미는 매우 모호합니다 : Word Size versus Address Size.

호환성 모드, 다양한 크기의 레지스터, 고급 주소 지정 모드 및 다양한 너비의 데이터에 적합한 명령어가있는 현재 프로세서는 일반 "단어 크기"에 대해 이야기하는 것이 부정확합니다.

면접자가 여전히 90 년대에 살고 있고 대부분의 컴퓨터가 여전히 16 비트 인 경우 WinAPI에서 도입 한 WORDDWORD 유형을 기억합니다.

0

나는 그들이 이런 식으로 뭔가를 기대했던 생각 :

printf("%d\n", (int)sizeof(int) * CHAR_BIT); 
+2

워드 크기가 8 비트이면 sizeof (int)가 작동하지 않습니다. 또한 대부분의 64 비트 컴파일러에서 int는 32 비트이고 단어는 64 비트입니다. – Juho

+0

@PaulR : 우리는 게시물과 수정으로 경쟁 조건을 맞았습니다. :) –

+0

@ 주 호 : 그것이 작동하지 않는다는 것은 무엇을 의미합니까? Btw, int는 C 표준 당 적어도 16 비트 길이 여야합니다. 내재 된 하드웨어, 단어 크기를 알아내는 것은 아마 C에서 신뢰할 수있는 일이 아닐 것입니다. –