[英]alignment/padding in C structure
我正在查看項目中的代碼。
以下是定義的結構:
typedef struct {
ULONG gatewayIp;
UBYTE status;
UBYTE align;
UWORD info;
ULONG magicTemp;
uword stationCode;
} GatewayStatus;
我的問題是,為什么我們在上述結構中處於中間。
我教過編譯器如何按照下面的鏈接所述進行對齊。 http://vcfaq.mvps.org/lang/11.htm
無論上述結構如何,我都會概括我的問題。在什么情況下,我們必須以編程方式進行調整,什么情況下編譯器將為我們做到這一點?
如果兩台機器的字節序類型不同(例如,一個m / c為大字節序而另一字節為低字節序),是否需要填充?
請澄清我的問題。
謝謝!
我可以想象很清楚,在該位置將有一個填充字節。 如果將來有人想添加一個字節字段,這可能會很有用。
另一個場景是,如果該結構體在沒有對齊要求的系統上使用(這通常是8位架構的情況),但其布局仍應與大型機上的布局相同。 在這種情況下,結構定義需要顯式填充。
默認情況下,編譯器將數據對齊為最大可對齊字節,具體取決於計算機。 對於Linux,GCC編譯器默認情況下執行4字節對齊。
如果要對齊8、16、32等字節,則需要明確告知編譯器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.