Czy rozmiar typu jest niezalezny od platformy, na ktorej pracujemy?
Czy ktoś zna odpowiedź na to pytanie i potrafi podać uzasadnienie ?
Z góry dzięki :)
Przed odpowiedzią na to pytanie trzeba uściślić co rozumiemy przez rozmiar.
- wynik wyrażenia
sizeof(T)
Wszystkie typy poza char
, signed char
i unsigned char
(które mają rozmiar 1
) mają implementation-defined rozmiar. Dlaczego? Bo tak zostało to zdefiniowane przez komisję standaryzacyjną. Dlaczego? Aby umożliwić tworzenie wydajnej implementacji języka na jak największej liczbie platform.
- liczbę bitów zajmowaną przez zmienną danego typu.
Wtedy char
i spółka są zależne od implementacji (konkretnie mają CHAR_BIT
bitów, gdzie CHAR_BIT
≥ 8), natomiast typy o stałej wielkości, takie jak uint8_t
, uint16_t
, uint32_t
, uint64_t
, int8_t
, int16_t
, int32_t
, int64_t
mają ściśle określony rozmiar. Ponadto tablice tych typów również będą miały ściśle określony rozmiar.
Co więcej, również implementation-defined jest ilość bitów w bajcie (zobacz CHAR_BIT
). Standard C wymaga tylko żeby CHAR_BIT
>= 8. Standard POSIX wymaga natomiast CHAR_BIT == 8
.
Czy rozmiar typu jest niezalezny
Zależy którego.
char
ma 1 bajt niezależnie od platformy.
rozmiar int
czy long
jest zależny od platformy.
typy takie jak int32_t
mają określony rozmiar niezależny od platformy.