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?
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?
Câu trả lời:
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.
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à c ++ , nên có thể chỉ ra rằng std::vector<bool>
nó 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::search
có thể không hoạt động).