เหตุใดค่าบูลีนจึงถูกเก็บเป็นไบต์ภายในคอมพิวเตอร์เมื่อต้องการเพียงบิตเดียว


32

ฉันเพิ่งเริ่มเรียนรู้การเขียนรหัสและในหนังสือของฉันฉันเจอคำถามนี้ "ทำไมค่าบูลีนจึงถูกจัดเก็บเป็นไบต์ภายในคอมพิวเตอร์เมื่อต้องการเพียงบิตเดียว" บางคนสามารถให้ความกระจ่างแก่คำถามนี้ได้มากขึ้น


10
นี่ไม่ได้พูดจริงอย่างเคร่งครัด บางภาษา (เช่น C / C ++) มีวิธีการเก็บค่าบูลีนเป็นบิตเดียวหากบิตเหล่านี้รวมอยู่ในไบต์เดียว กล่าวอีกนัยหนึ่งใน C คุณสามารถเก็บแปด booleans ใน byte แต่มีน้อยคนนักที่จะใช้อุปกรณ์นี้เนื่องจากหน่วยความจำมีราคาถูกและโปรเซสเซอร์ใช้ข้อมูลใน 8/16/32/64 บิต
Gort the Robot

คำตอบสำหรับคำถามที่คล้ายกันนี้คือสิ่งที่คุณควรเห็น! คุณจะได้รับการอ้างอิงขนาดใหญ่ที่นั่น ... ไชโย!
Sam


มีความเกี่ยวข้องอย่างใกล้ชิด: stackoverflow.com/questions/8014161/…
Ben Lee

คำตอบ:


49

มันเกี่ยวข้องกับสิ่งที่ CPU สามารถจัดการได้อย่างง่ายดาย ตัวอย่างเช่นในโปรเซสเซอร์ x86 มีeax(32 บิต), ax(16 บิต) และah(8 บิต) แต่ไม่มีการลงทะเบียนบิตเดียว ดังนั้นในการที่จะใช้ซีพียูสักหน่อยซีพียูจะต้องทำการอ่าน / แก้ไข / เขียนเพื่อเปลี่ยนค่า หากถูกเก็บเป็นไบต์คุณสามารถใช้การอ่านหรือเขียนครั้งเดียวเพื่อตรวจสอบ / เปลี่ยนค่า

นอกจากนี้หนึ่งอาจสงสัยว่ามันจะดีกว่าถ้าใช้บิตเดียวเทียบกับไบต์เต็มหลังจากไบต์ทั้งหมดจะเสีย 7 บิต เว้นเสียแต่ว่าพื้นที่จะมีข้อ จำกัด ที่ควรไปสำหรับไบต์เพราะอย่างน้อย x86 และฉันคิดว่าคนอื่น ๆ มักจะมีคำแนะนำในการตั้งค่า / ล้างบูลอย่างรวดเร็วซึ่งเร็วกว่าการอ่าน / แก้ไข / เขียนบิตเพียงเล็กน้อย . จากการวัดส่วนบุคคลฉันได้เห็นวิธีการอ่าน / ดัดแปลง / เขียนช้ากว่าวิธีการสอนเดี่ยว 5 เท่า


6
คำเดียวที่คุณหายไปคือ "การจัดแนวชายแดน"
Manoj R

3
ในอีกทางหนึ่งฉันเคยเห็นการเร่งความเร็ว 2x จากการใช้แต่ละบิตน่าจะเป็นเพราะการใช้แคชที่ดีขึ้นด้วยชุดข้อมูลขนาดเล็ก
Michael Borgwardt

5

ดังที่ @ barrem23 อธิบายว่าข้อมูลจะต้องสามารถกำหนดแอดเดรสได้และขอบเขตที่เล็กที่สุดของสถาปัตยกรรมทั่วไปคือไบต์

แต่เนื่องจากคำถามนี้จะติดแท็กเป็นก็อาจจะคุ้มค่าที่ชี้ให้เห็นว่าstd::vector<bool>เป็นความเชี่ยวชาญที่จะอนุญาตให้แต่ละองค์ประกอบจะถูกเก็บไว้เป็นบิต วิธีนี้จะช่วยประหยัดพื้นที่ด้วยการเสียสละฟังก์ชั่นบางอย่าง (ตัวอย่างเช่นstd::searchอาจไม่ทำงาน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.