È bitfield un concetto C o C++?Domande su C bitfields
Può essere utilizzato solo all'interno di una struttura? Quali sono gli altri posti in cui possiamo usarli?
AFAIK, i bitfield sono variabili di struttura speciali che occupano la memoria solo per il numero specificato. di bit. È utile per risparmiare memoria e nient'altro. Sono corretto?
ho codificato un piccolo programma per capire l'utilizzo di campi di bit - Ma, penso che non funziona come previsto. Mi aspetto che la dimensione della struttura sottostante sia 1 + 4 + 2 = 7 byte (considerando la dimensione di unsigned int è 4 byte sulla mia macchina), ma con mia sorpresa risulta essere 12 byte (4 + 4 + 4). Qualcuno può farmi sapere perché?
#include <stdio.h>
struct s{
unsigned int a:1;
unsigned int b;
unsigned int c:2;
};
int main()
{
printf("sizeof struct s = %d bytes \n",sizeof(struct s));
return 0;
}
USCITA:
sizeof struct s = 12 bytes
Al downgoter - quale di queste affermazioni non sei d'accordo? –
+1: 'implementazione dependent' e 'avoid bitfields' sono la chiave. –
Qui parzialmente non sono d'accordo riguardo ai risparmi di memoria: sentiti libero di specificare i campi di bit in cui potrebbero ridurre l'impronta di memoria di una struttura. Ma non cercare mai di essere intelligente con loro e sette volte non contare mai su ciò che il compilatore farà con loro. – dmckee