簡體   English   中英

Bitfields,為什么具體實現?

[英]Bitfields, why implementation specific?

C / C ++位域似乎在硬件驅動程序和二進制網絡傳輸中有很多應用。 但是它們似乎並沒有被廣泛使用,並且通常不鼓勵,因為實際的二進制布局是特定於實現的,如C99標准6.7.2.1/10中的引用所示 - “結構和聯合說明符”;

實現可以分配足夠大的任何可尋址存儲單元來保持位域。 如果剩余足夠的空間,則緊跟在結構中的另一個位字段之后的位字段將被打包到相同單元的相鄰位中。 如果剩余的空間不足,則是否將不適合的位域放入下一個單元或重疊相鄰單元是實現定義的。 單元內的位域分配順序(高階到低階或低階到高階)是實現定義的。 未指定可尋址存儲單元的對齊。

我的問題很簡單; 為什么委員會決定將位字段保留為特定於實現的東西,從而使其成為編譯器構造,主要用於減少內存使用,在許多情況下它可用於提供良好的二進制布局,並且免費開發人員從小巧的代碼?

出於同樣的原因,標准沒有嚴格規定許多其他內容:允許靈活地為大量平台和系統生成兼容的編譯器,並且仍然具有EFFICIENT編譯器。

特別是,必須以特定的位/字節順序存儲的位域將使其在自然字節順序是“錯誤的方式”的機器上非常慢。

是的,這意味着在多個構架和平台上使位域可移植是一種正確的痛苦。 如果你真的需要那個,那么也許你應該考慮一些其他解決方案......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM