直接上代碼測試是入門神器,以結構體為例,解釋“對齊”和“補齊”概念。
#include <iostream> struct Empty {}; struct Foo { int f2; double f1; char c; }; struct alignas(16) FooNew { int f2; double f1; char c; }; int main() { std::cout << "alignment of empty class: " << alignof(Empty) << '\n' << "alignment of pointer : " << alignof(int*) << '\n' << "alignment of char : " << alignof(char) << '\n' << "alignment of Foo : " << alignof(Foo) << '\n' << "Size of Foo: " << sizeof(Foo) << '\n' << "alignment of FooNew : " << alignof(FooNew) << '\n'; }
輸出結果是:
alignment of empty class: 1 alignment of pointer : 8 alignment of char : 1 alignment of Foo : 8 Size of Foo: 24 alignment of FooNew : 16
總之,對齊是某種類型的初始位置在內存上的限定,補齊是對該類型大小的限定,兩者共同組成了該類型在內存上的排布規則,提高操作效率。