簡體   English   中英

C + +對齊結構與對齊的成員

[英]c++ alignment of struct with aligned members

struct是否始終與該struct的最大對齊成員相同? 如果不是,如何自動執行此操作,也許使用gcc特定的擴展名? (我知道有__attribute((aligned(...)))__ ,但是必須明確指定對齊方式)。

c99,c ++ 99和c ++ 11之間的行為是否有所不同? c ++ 11是否有一些額外的規定來執行對齊?

示例:使用以下代碼, Foo本身會自動對齊為8個字節,還是我也需要顯式對齊?

struct Foo{
    int i __attribute__((aligned(8)));
};

對齊是系統和處理器的特定屬性。 允許編譯器盡其所能(並且必須了解處理器和系統的對齊約束)。

大多數ABI規范(例如,用於Linux的AMD64 ABI )都包含一些對齊提示。

我確實相信對齊約束會從字段傳播到包含它們的聚合(例如struct -s)。

如果對動態分配的數據有異常的對齊約束,則可能需要顯式對齊,例如,使用posix_memalign分配它們。 malloc和相關的分配器(包括C ++中::operator new )可能不會比默認約束所需的對齊更好。

暫無
暫無

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

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