Bitfield là khái niệm C hoặc C++?Câu hỏi về C bitfields
Chỉ được sử dụng trong cấu trúc? Những nơi khác chúng ta có thể sử dụng chúng là gì?
AFAIK, bitfield là các biến cấu trúc đặc biệt chỉ chiếm bộ nhớ cho số không được chỉ định. bit. Nó rất hữu ích trong việc tiết kiệm bộ nhớ và không có gì khác. Tôi có đúng không?
Tôi đã mã hóa một chương trình nhỏ để hiểu cách sử dụng bitfields - Nhưng tôi nghĩ nó không hoạt động như mong đợi. Tôi mong đợi kích thước của cấu trúc dưới đây là 1 + 4 + 2 = 7 byte (xem xét kích thước của unsigned int là 4 byte trên máy tính của tôi), Nhưng tôi ngạc nhiên nó hóa ra là 12 byte (4 + 4 + 4). Có ai cho tôi biết tại sao không?
#include <stdio.h>
struct s{
unsigned int a:1;
unsigned int b;
unsigned int c:2;
};
int main()
{
printf("sizeof struct s = %d bytes \n",sizeof(struct s));
return 0;
}
OUTPUT:
sizeof struct s = 12 bytes
Để trình gỡ xuống - bạn không đồng ý với những tuyên bố này? –
+1: 'phụ thuộc triển khai' và 'tránh bitfield' là chìa khóa. –
Tôi sẽ không đồng ý một phần ở đây liên quan đến tiết kiệm bộ nhớ: vui lòng chỉ định các trường bit mà chúng có thể làm giảm dấu chân bộ nhớ của một cấu trúc. Nhưng đừng bao giờ cố gắng thông minh với họ và bảy lần không bao giờ dựa vào những gì trình biên dịch sẽ làm với họ. – dmckee