ANSI C standardı, bit alanlarının "derleyicilerin bit alanlarını ancak uygun gördükleri halde paketlemelerine izin verilir" karşısında önemli bir avantaj sağlamak için nasıl paketlendiği hakkında çok az şey belirtmesine rağmen, yine de çoğu durumda derleyicilerin şeyleri en verimli şekilde paketlemesini yasaklar.
Özellikle, bir yapı bit alanları içeriyorsa, bir derleyicinin bunu bazı "normal" depolama tipinin bir veya daha fazla anonim alanını içeren bir yapı olarak saklaması ve daha sonra bu tür her alanı mantıksal olarak kurucu bit alanı parçalarına böler. Böylece verilen:
unsigned char foo1: 3;
unsigned char foo2: 3;
unsigned char foo3: 3;
unsigned char foo4: 3;
unsigned char foo5: 3;
unsigned char foo6: 3;
unsigned char foo7: 3;
Eğer unsigned char8 bit olduğunu, derleyici bu tür dört alanları tahsis ve (bir de olacağını tüm ama birine iki bitfields atamak için gerekli olacaktır char, kendi alanında). Tüm charbildirimler ile değiştirilmiş shortolsaydı short, biri beş bit alanını , diğeri kalan ikisini tutacak iki tür alanı olurdu.
Hizalama kısıtlamaları olmayan bir işlemcide veriler unsigned short, ilk beş alan unsigned chariçin ve son ikisi için üç baytta yedi üç bitlik alan saklanarak daha verimli bir şekilde düzenlenebilir . Üç baytta sekiz üç bitlik alan depolamak mümkün olsa da, bir derleyici buna yalnızca "dış alan" türü olarak kullanılabilecek üç baytlık bir sayısal tür varsa izin verebilir.
Kişisel olarak, bit alanlarının temelde faydasız olduğunu düşünüyorum. Kodun ikili olarak paketlenmiş verilerle çalışması gerekiyorsa, gerçek türlerin depolama konumlarını açıkça tanımlamalı ve ardından bunların bitlerine erişmek için makroları veya bu tür başka araçları kullanmalıdır. C'nin aşağıdaki gibi bir sözdizimini desteklemesi yararlı olacaktır:
unsigned short f1;
unsigned char f2;
union foo1 = f1:0.3;
union foo2 = f1:3.3;
union foo3 = f1:6.3;
union foo4 = f1:9.3;
union foo5 = f1:12.3;
union foo6 = f2:0.3;
union foo7 = f2:3.3;
Böyle bir sözdizimi, izin verilirse, kodun bit alanlarını kelime boyutlarına veya bayt sıralamalarına bakılmaksızın taşınabilir bir şekilde kullanmasını mümkün kılar (foo0, f1'in en az anlamlı üç bitinde olurdu, ancak bunlar alt veya daha yüksek adres). Ancak böyle bir özellik olmadığından, makrolar muhtemelen bu tür şeylerle çalışmanın tek taşınabilir yoludur.