簡體   English   中英

C結構中的對齊/填充

[英]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.

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