Tại sao giá trị Boolean được lưu trữ dưới dạng byte bên trong máy tính khi nó chỉ yêu cầu một bit


32

Gần đây tôi đã bắt đầu học viết mã, và trong cuốn sách của mình, tôi đã bắt gặp câu hỏi này. "Tại sao giá trị Boolean được lưu trữ dưới dạng byte bên trong máy tính khi nó chỉ yêu cầu một bit?" ai đó có thể làm sáng tỏ hơn về câu hỏi này?


10
Điều này không đúng khi nói đúng. Một số ngôn ngữ (như C / C ++) cung cấp các cách lưu trữ giá trị boolean dưới dạng các bit đơn, nếu các bit này được gói trong một byte đơn. Nói cách khác, trong C, bạn có thể lưu trữ tám booleans trong một byte. Nhưng ít ai từng sử dụng điều này vì bộ nhớ rẻ và bộ xử lý thao tác dữ liệu trong các khối 8/16 / 32/64 bit.
Gort Robot

Câu trả lời cho một câu hỏi tương tự là những gì bạn nên xem! Bạn sẽ nhận được tài liệu tham khảo lớn ở đó ... Chúc mừng!
Sam


Câu trả lời:


49

Nó phải làm với những gì CPU có thể dễ dàng giải quyết. Ví dụ, trên bộ xử lý x86 có eax(32 bit), ax(16 bit) và ah(8 bit) nhưng không có thanh ghi bit đơn. Vì vậy, để nó sử dụng một bit, CPU sẽ phải đọc / sửa đổi / ghi để thay đổi giá trị. Nếu nó được lưu trữ dưới dạng byte, một lần đọc hoặc ghi có thể được sử dụng để kiểm tra / thay đổi giá trị.

Ngoài ra, người ta có thể tự hỏi liệu sẽ tốt hơn nếu sử dụng một bit so với một byte đầy đủ, sau khi tất cả một byte sẽ lãng phí 7 bit. Trừ khi không gian là một ràng buộc mà người ta nên sử dụng byte bởi vì, ít nhất là x86 và tôi nghĩ rằng những người khác, thường có một hướng dẫn để nhanh chóng thiết lập / xóa một bool nhanh hơn nhiều so với đọc / sửa đổi / ghi của một bit . Từ các phép đo cá nhân tôi đã thấy phương thức đọc / mod / ghi chậm hơn 5x so với phương pháp lệnh đơn.


6
Từ duy nhất bạn đang thiếu là "Căn chỉnh ranh giới".
Manoj R

3
Mặt khác, tôi đã thấy tốc độ tăng gấp 2 lần từ việc sử dụng các bit riêng lẻ, có lẽ là do sử dụng bộ đệm tốt hơn với bộ dữ liệu nhỏ hơn.
Michael Borgwardt

5

Như @ barrem23 giải thích , dữ liệu phải có địa chỉ và ranh giới nhỏ nhất trên các kiến ​​trúc thông thường là một byte.

Nhưng vì câu hỏi này được gắn thẻ là , nên có thể chỉ ra rằng std::vector<bool>chuyên biệt để cho phép các phần tử riêng lẻ được lưu trữ dưới dạng bit . Điều này sẽ tiết kiệm không gian bằng cách hy sinh một số chức năng (ví dụ, std::searchcó thể không hoạt động).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.