Concetto di campi di bit

3

Ogni volta che leggo un codice come questo:

  struct node
  {
          int x : 2;
          int p : 4;
   }n;

con campi di bit coinvolti, mi sento davvero confuso su come sono rappresentati in memoria, cos'è sizeof(n) ecc., come si differenzia con i normali membri delle strutture? Ho provato a riferirmi a K & R e link ma loro non hanno rimosso la mia confusione. Quali concetti dei campi di bit non riesco a cogliere?

    
posta user1369975 28.06.2013 - 21:15
fonte

2 risposte

5

sizeof report in unità di byte, quindi non si comporta bene per i campi di bit.

C non ha uno standard chiaro su come devono essere definiti i campi di bit e, in generale, dovresti essere estremamente cauto riguardo a qualsiasi ipotesi, specialmente se piattaforme diverse o diversi compilatori potrebbero entrare in gioco.

Di solito uso schemi di imballaggio / disimballaggio manuali, ma nascondo i dettagli in allegato funzioni, in quelle rare circostanze in cui informazioni di imballaggio in numeri interi a livello di bit è appropriato. L'unico caso in cui il layout dei campi di bit è assolutamente importante scrivere i driver per l'hardware.

    
risposta data 29.06.2013 - 03:22
fonte
0

Correggere, ogni volta che viene usato un campo bit, tutti vengono confusi. Poiché i campi di bit sono specificati in modo non corretto dallo standard e possono avere praticamente qualsiasi layout di memoria immaginabile.

what is sizeof(n)

Nessuno lo sa, incluso il comitato standard C.

how does it differ with normal members of structures?

Le strutture normali hanno un comportamento ben definito. A parte il caso del riempimento della struttura, è sempre possibile prevedere come una struttura normale viene memorizzata. Per i campi bit, tutte le scommesse sono disattivate.

Informazioni dettagliate qui .

La soluzione è di non usare mai campi di bit. È una parte superfluo e pericolosa del linguaggio C.

    
risposta data 01.07.2013 - 17:13
fonte

Leggi altre domande sui tag