Cześć,
Kilka razy już słyszałem, że typ uint8_t, uint16_t zajmuje 32bity na proceorach 32 bitowych, konkretnie dotyczyło to mikrokontrolerów 32 bitowych.
Napisałem mały program który to sprawdza:
uint8_t *a;
uint32_t *b;
double *c;
UART_printf("sizeof(uint8_t*) = %d\r\n", sizeof(a));
UART_printf("sizeof(uint32_t*) = %d\r\n", sizeof(b));
UART_printf("sizeof(double*) = %d\r\n", sizeof(c));
uint8_t val1;
uint8_t val2;
uint8_t val3;
uint8_t val4;
UART_printf("Address of val1 = %x\r\n", &val1);
UART_printf("Address of val2 = %x\r\n", &val2);
UART_printf("Address of val3 = %x\r\n", &val3);
UART_printf("Address of val4= %x\r\n", &val4);
i taki jest wynik tego programu na procesorze ARM M4
sizeof(uint8_t*) = 4
sizeof(uint32_t*) = 4
sizeof(double*) = 4
Address of val1 = 20001fef
Address of val2 = 20001fee
Address of val3 = 20001fed
Address of val4 = 20001fec
Z tego można wywnioskować że typ uint8_t zajmuje dokładnie tyle ile powinien -> 1bajt. Jak to będzie wyglądało na innych systemach?
Druga kwestia to rozmiar wskaźnika. Na Cortexie M4 wskaźnik na uint8_t uint32_t i double zajmuje tyle ile długość słowa, czyli 32 bity. Od czego to zależy?
Od długości słowa, kompilatora?