#include<stdio.h>
typedef struct {
int bit1:1;
int bit3:4;
int bit4:4;
} node;
int main(){
node n,n1,n2,ff[10];
printf("%d\n",sizeof(node));
return 0;
}
어떻게 구조의 크기를 예측합니까?
#include<stdio.h>
typedef struct {
int bit1:1;
int bit3:4;
int bit4:4;
} node;
int main(){
node n,n1,n2,ff[10];
printf("%d\n",sizeof(node));
return 0;
}
어떻게 구조의 크기를 예측합니까?
컴파일러와 컴파일 할 대상 플랫폼을 알지 못하면 예측할 수 없습니다.
일반적으로 모든 컴파일러는 유니온을 패킹하는 방법을 결정하므로 최종 크기에 대해 많은 가정을 할 수 없습니다. 매개 변수에 따라 다른 레이아웃을 결정할 수 있습니다.
는 플랫폼과 컴파일러 설정 (포장, 정렬, 32/64 기계)
에에 달려있다 "그들은 더 적은 휴대용 있지만 비트 필드는 이식성이 떨어지는 것으로 생각되지 않는다 언어의 다른 부분보다. "
이상한 견적 ... – jalf
구조체의 크기는 컴파일러 최적화 설정에 따라 변경됩니다. 나는이 구조에 대해 2에서 12 바이트 사이의 어느 곳이든 예측할 수 있습니다.
여러분이하는 것처럼 비트 필드를 사용하는 경우에도 항상 구조체의 크기를 예측할 수는 없습니다. 컴파일러는 모든 비트 필드가 int의 전체 공간을 차지하도록하거나 사용자가 지정하는 1 ~ 4 비트 만 가져갈 수 있습니다. 비트 필드를 사용하는 것은 메모리 저장 공간에 좋지만 실행 시간과 실행 파일 크기에 좋지 않습니다.
컴파일러가이 구조체가 int 크기보다 작게 차지하는 것은 합법적인지 확신 할 수 없습니다. sizeof (...)는 정수를 반환해야하기 때문에 확실히 char의 크기보다 작게 차지할 수는 없습니다. – Stewart
@Stewart :'sizeof (int) == 2 '인 플랫폼이 있습니다. –
@Stephen : 나는 거기에 없다고 생각하지 않는다. 또한 8 비트의 배수가 아닌 플랫폼도 있으며, 내 대답에는 그 중 하나도 허용되지 않습니다. 대답은 컴파일러가 구조체를 4 비트로 만 패킹 할 수 있다는 것을 말합니다. 즉, 적어도 16 비트 이상이어야하는 int 형에서 특히 그렇습니다. – Stewart
일반적으로 예측할 수는 없지만 실제로는 sizeof (int)보다 더 자주 발생합니다. 어느 자체가 매우 자주 4; 덜 일반적으로 2 번, 확실하게 8 번.
대부분의 경우 비트 필드가 압축되고 대부분 int 유형은 9 비트 이상의 저장 공간을 갖습니다.
int는 항상 최소 16 비트입니다. 표준에서는 이렇게 말합니다 (long은 항상 32 이상이며 C99에서는 64보다 길고 길이가 길어서 모두 크기보다 클 수 있습니다) – Spudd86
왜 정확히 예측할 수 있어야한다고 생각합니까? –
그리고 왜하고 싶니? –