loại cân nhắc nào đáng để đưa ra cho các nền tảng với char không 8 bit?
số ma thuật xảy ra, ví dụ như khi thay đổi;
hầu hết trong số này có thể được xử lý khá đơn giản bằng cách sử dụng CHAR_BIT và ví dụ UCHAR_MAX thay vì 8 và 255 (hoặc tương tự).
Hy vọng việc thực hiện của bạn xác định những điều đó :)
đó là những vấn đề "phổ biến" .....
một vấn đề gián tiếp khác là bạn có:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
điều này có thể "chỉ" lấy (trường hợp tốt nhất) 24 bit trên một nền tảng, nhưng có thể mất ví dụ 72 bit ở nơi khác .....
nếu mỗi uchar giữ "cờ bit" và mỗi uchar chỉ có 2 bit hoặc cờ "đáng kể" mà bạn hiện đang sử dụng và bạn chỉ sắp xếp chúng thành 3 uchar để "rõ ràng", thì có thể tương đối "lãng phí" hơn một nền tảng với uchars 24 bit .....
không có gì bitfield không thể giải quyết, nhưng họ có những thứ khác để đề phòng ....
trong trường hợp này, chỉ một enum có thể là một cách để có được số nguyên có kích thước "nhỏ nhất" mà bạn thực sự cần ....
có lẽ không phải là một ví dụ thực tế, nhưng những thứ như "bit" này khi tôi chuyển / chơi với một số mã .....
thực tế là nếu một con uchar có ba lần lớn như những gì "bình thường" mong đợi, 100 cấu trúc như vậy có thể lãng phí rất nhiều bộ nhớ trên một số nền tảng ..... trong đó "thông thường" không phải là vấn đề lớn .... .
do đó, mọi thứ vẫn có thể bị "hỏng" hoặc trong trường hợp này "lãng phí rất nhiều bộ nhớ rất nhanh" do một giả định rằng một uchar "không lãng phí" trên một nền tảng, liên quan đến RAM có sẵn, so với trên nền tảng khác ... ..
vấn đề có thể nổi bật hơn, ví dụ như đối với int, hoặc các loại khác, ví dụ: bạn có một số cấu trúc cần 15 bit, vì vậy bạn gắn nó vào một int, nhưng trên một số nền tảng khác, int là 48 bit hoặc bất cứ điều gì .... .
"bình thường" bạn có thể chia nó thành 2 uchar, nhưng ví dụ với uchar 24 bit bạn chỉ cần một .....
vì vậy một enum có thể là một giải pháp "chung chung" tốt hơn ....
phụ thuộc vào cách bạn đang truy cập vào các bit đó :)
vì vậy, có thể có "lỗi thiết kế" phía sau đầu của họ .... ngay cả khi mã vẫn có thể hoạt động / chạy tốt bất kể kích thước của uchar hay uint ...
có những thứ như thế này để đề phòng, mặc dù không có "số ma thuật" nào trong mã của bạn ...
hy vọng điều này có ý nghĩa :)