2009-10-06 2 views

답변

8

차이는 없습니다.
하나의 char은 1 바이트를 차지합니다.
1 바이트에는 CHAR_BIT 비트가 있습니다.

#include <limits.h> 
#include <stdio.h> 

int main(void) { 
    printf("a char occupies 1 byte of %d bits.\n", CHAR_BIT); 
    return 0; 
} 
+0

감사합니다. 확실히 확인하고 싶었습니다. – pxl

+0

char가 적어도 8 비트 폭으로 보장된다고 생각했습니다. 컴파일러는 원하는 경우 8 비트 이상을 사용할 수 있습니다. 이론상 64 비트 x86 컴파일러는 32 비트 x86 컴파일러와 다른 표현을 선택할 수 있습니다. –

+0

나는 이것이 의도 인 동안 동일한 표현을 지키는 어딘가를 읽었다. 그러나 동일한 코드가 64 또는 32 비트로 컴파일 될 때 저장된 방법으로 인해 문제가 발생할 수 있습니다. 그게 내가 지금 가지고있는 문제입니다, 어떻게 내가 제대로 (일반적으로 sizeall (sizeof (char *) * 5)) 일반적인 경우에 크기 조정을 처리하는지 확인해야합니까 (ie future proof it 128 비트 이상). – pxl

4

한 가지 가능한 차이점은 문자가 32 비트 경계가 아닌 64 비트에 정렬 될 수 있다는 것입니다.

struct { 
    char a; 
    char b; 
} 

32은 2 * 4 바이트와 64 비트 2 * 8 바이트를 차지할 수있다.

편집 - 실제로는 그렇지 않습니다. 정상적인 컴파일러는 바이트 경계의 문자 만 사용하여 구조체를 다시 패킹합니다. 그러나 '긴 c;' 결국 아무 일도 일어나지 않을 것입니다. 그래서 a) sizeof()가 있고 b) c에서 수동 포인터 작업을 수행 할 때주의해야합니다.

+0

"힘"은 나를 겁주는 것이다. 내가 어떻게 확신 할 수 있니? 확실하지 않으면 32 비트 및 64 비트 아키텍처 모두에서 동일한 코드가 컴파일되고 예상대로 작동하도록하려면 어떻게해야합니까? – pxl

+2

의도적으로 기억을 망쳐 놓지 않는 한 그것은 중요하지 않습니다. 런타임시 구조체의 크기를 확인할 수는 있지만 일반적으로 정렬은 컴파일러 옵션 인 –

+0

입니다. 후속 조치 덕분에 – pxl

관련 문제