Như Amogh (adamantly) và PHIfounder chỉ ra các loại di động hoàn toàn duy nhất là _Bool
, signed int
và unsigned int
. Tuy nhiên, rất nhiều trình biên dịch cho phép các kiểu tích phân khác có thể bao quanh bằng cách đóng gói các trường bit. Bit-lĩnh vực trong thực tế thường được sử dụng để đại diện cho đăng ký thiết bị, nơi thường mỗi bit hoặc tập hợp các bit có ý nghĩa riêng của mình. Việc đóng gói các bit được quyết định bởi 6.7.2.1 quảng cáo 11 của tiêu chuẩn C
Việc triển khai có thể phân bổ bất kỳ đơn vị lưu trữ địa chỉ nào đủ lớn để giữ trường bit. Nếu đủ không gian còn lại, một trường bit ngay sau một trường bit khác trong một cấu trúc sẽ được đóng gói thành các bit liền kề của cùng một đơn vị. Nếu không đủ không gian, dù một trường bit không vừa với được đặt vào đơn vị kế tiếp hay chồng chéo các đơn vị lân cận được xác định thực hiện. Thứ tự phân bổ các trường bit trong một đơn vị (thứ tự cao đến thứ tự thấp hoặc thứ tự thấp đến thứ tự cao) được xác định thực hiện. Căn chỉnh của đơn vị lưu trữ địa chỉ không được chỉ định.
Nhiều trình biên dịch đã áp dụng quy ước rằng 'đơn vị lưu trữ địa chỉ' thuộc loại được chỉ định trong nguồn. Trình biên dịch gcc
chẳng hạn không cho phép trường bit 9 bit loại unsigned char
, nhưng nó cho phép nó cho loại unsigned int
. Trong ví dụ của bạn, trình biên dịch gcc
cho Pentium cấu trúc sử dụng unsigned char
sẽ có kích thước 1 byte, trong khi đó, sử dụng unsigned int
sẽ là 4 byte. Nhiều trình biên dịch cũng đã thông qua quy ước rằng nếu một trường bit không vừa, nó sẽ là không trùng lặp với đơn vị tiếp theo. Tuy nhiên điều này có thể được áp dụng sử dụng một chút-field 0 chiều rộng như quyết định bởi 6.7.2.1 quảng cáo 12 của
Một tuyên bố bit lĩnh vực tiêu chuẩn không có declarator, nhưng chỉ có một dấu hai chấm và chiều rộng, chỉ ra một trường bit chưa đặt tên. Như một trường hợp đặc biệt, một thành phần cấu trúc trường bit có chiều rộng bằng 0 chỉ ra rằng không có trường bit nào được thêm vào trong đơn vị mà trường bit trước đó, nếu có, được đặt.
Nếu bạn kết hợp bit lĩnh vực với phi-bit-lĩnh vực sau đó 6.7.2.1 quảng cáo 15 dictates rằng các đơn vị địa chỉ của bit-trường và phi-bit-lĩnh vực sẽ có địa chỉ khác nhau
Trong một đối tượng cấu trúc, các thành viên không thuộc trường bit và các đơn vị trong đó các trường bit nằm ở đó có các địa chỉ tăng theo thứ tự mà chúng được khai báo. Một con trỏ trỏ đến một đối tượng cấu trúc, được chuyển đổi phù hợp, trỏ tới thành viên ban đầu của nó (hoặc nếu thành viên đó là một trường bit, sau đó đến đơn vị mà nó cư trú) và ngược lại. Có thể có đệm không tên trong một đối tượng cấu trúc, nhưng không phải ở đầu của nó.
Một số kiến trúc Ứng dụng Giao diện nhị phân (ABI) của kiến trúc thực thi các lựa chọn được thực hiện để đảm bảo khả năng tương tác của các trình biên dịch khác nhau cho kiến trúc đó.
Tốt hơn cho những gì? Thời gian, không gian, nhiệt độ, tâm trạng, ...? –
Xem thêm http://stackoverflow.com/questions/3971085/how-does-a-bit-field-work-with-character-types – devnull
@BryanOlivier tốt hơn để cấp phát bộ nhớ – Chinna