Mengapa nilai Boolean disimpan sebagai byte di dalam komputer saat itu hanya membutuhkan satu bit

32

Baru-baru ini saya mulai belajar menulis kode, dan dalam buku saya menemukan pertanyaan ini. "Mengapa nilai Boolean disimpan sebagai byte di dalam komputer padahal hanya membutuhkan satu bit?" dapatkah seseorang menjelaskan lebih lanjut tentang pertanyaan ini?

Tn. 1.0
sumber
10
Ini tidak sepenuhnya benar. Beberapa bahasa (seperti C / C ++) menyediakan cara untuk menyimpan nilai boolean sebagai bit tunggal, jika bit ini dibundel dalam byte tunggal. Dengan kata lain, dalam C, Anda dapat menyimpan delapan boolean dalam satu byte. Tetapi sedikit yang pernah menggunakan ini karena memori murah dan prosesor memanipulasi data dalam potongan 8/16/32/64 bit.
Gort the Robot
Jawaban untuk pertanyaan serupa ini adalah apa yang harus Anda lihat! Anda akan mendapatkan referensi besar di sana ... Ceria!
Sam

Jawaban:

49

Ini ada hubungannya dengan apa yang dapat dengan mudah ditangani oleh CPU. Misalnya pada prosesor x86 ada eax(32 bit), ax(16 bit) dan ah(8 bit) tetapi tidak ada bit register tunggal. Jadi agar dapat menggunakan bit tunggal CPU harus melakukan baca / modifikasi / tulis untuk mengubah nilai. Jika disimpan sebagai byte, satu baca atau tulis dapat digunakan untuk memeriksa / mengubah nilainya.

Selain itu orang mungkin bertanya-tanya apakah akan lebih baik menggunakan bit tunggal vs byte penuh, setelah semua byte akan menghabiskan 7 bit. Kecuali ruang adalah kendala yang harus digunakan untuk byte karena, setidaknya x86 dan saya pikir yang lain, biasanya ada instruksi untuk dengan cepat mengatur / menghapus bool yang jauh lebih cepat daripada membaca / memodifikasi / menulis bit tunggal. . Dari pengukuran pribadi saya telah melihat metode baca / mod / tulis menjadi 5x lebih lambat daripada metode instruksi tunggal.

barrem23
sumber
6
Satu-satunya kata yang Anda lewatkan adalah "Penjajaran Batas".
Manoj R
3
Di sisi lain, saya telah melihat speedup 2x dari menggunakan bit individual, mungkin karena penggunaan cache yang lebih baik dengan kumpulan data yang lebih kecil.
Michael Borgwardt
5

Sebagai @ barrem23 menjelaskan , data harus dialamatkan , dan batas terkecil pada arsitektur konvensional adalah byte.

Tapi karena pertanyaan ini ditandai sebagai , mungkin layak menunjuk bahwa std::vector<bool>yang khusus untuk memungkinkan elemen-elemen individu untuk disimpan sebagai bit . Ini akan menghemat ruang dengan mengorbankan beberapa fungsionalitas (misalnya, std::searchmungkin tidak berfungsi).

chrisaycock
sumber