2017-07-01 3 views
4

ich das Konstrukt eine Struktur in C bin versucht ++ wie folgt:die Erinnerung an Struktur effizienter in C++

struct kmer_value { 
    uint32_t count : 32; 
    uint32_t path_length : 32; 
    uint8_t acgt_prev : 4; 
    uint8_t acgt_next : 4; 
} 

Die Struktur zur Zeit nimmt den Speicher von 12 Bytes, aber ich möchte die Größe reduzieren 9 Bytes. Gibt es eine Möglichkeit, es zu realisieren?

Vielen Dank.

+0

@AlexanderHuszagh 'acgt_prev' und' acgt_next' teilen 'uint8_t' – NathanOliver

+0

Sicher, komprimiere einfach den dynamischen Bereich von' count' oder 'path_length'. Wenn sie nicht jeweils 32 Bits benötigen, ordnen Sie für jede weniger. –

+0

Siehe auch https://stackoverflow.com/a/3318475/489590 –

Antwort

9

Es gibt keine tragbare Lösung. Für GCC, die

struct __attribute__((packed)) kmer_value { 
    uint32_t count : 32; 
    uint32_t path_length : 32; 
    uint8_t acgt_prev : 4; 
    uint8_t acgt_next : 4; 
}; 

In MSVC wäre #pragma pack die gleiche Wirkung erzielen kann.

Weitere Informationen finden Sie in der Dokumentation Ihres Compilers.