2014-11-17 26 views
5

Potrzebuję implementacji wydajnej tablicy bitów w C. Z tego, co widziałem, C nie obsługuje tego, więc możesz użyć tablicy liczb całkowitych (według jednej strony, na którą patrzyłem) a następnie użyj przesunięcia, aby uzyskać dostęp do poszczególnych bitów. Czy po prostu deklaracja tablicy bool byłaby tym samym lub czy jest to mniej pamięci wydajne?bool array vs bit array w C

+1

''bool' w C jest wewnętrznie" int ". '_bool []' używa około 32 razy (dawaj lub weź) tyle pamięci co tablica liczb całkowitych z przesunięciem bitowym. – EOF

+1

Jeśli korzystasz z C++, to std :: vector oferuje optymalizowaną przestrzeń dyskową, którą opisujesz. –

+2

@EOF: '_Bool' (nie' _bool') ma zwykle 1 bajt, nie jest tego samego rozmiaru co 'int'. –

Odpowiedz

3

Tak, prosta tablica _Bool wymaga więcej pamięci niż tablica liczb całkowitych połączona z pewnym przesunięciem bitowym. Macierz _Bool przechowuje jeden bit danych w przestrzeni sizeof(_Bool) (zwykle jeden bajt). Tablica całkowita może przechowywać o wiele więcej bitów na bajt (minimum 8).