Rozmiar typu

0

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 :)

7

Przed odpowiedzią na to pytanie trzeba uściślić co rozumiemy przez rozmiar.

  1. 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.

  1. 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.

2

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.

4

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1