[C++關鍵字] alignof & alignas 內存對齊 sizeof 占內存大小


直接上代碼測試是入門神器,以結構體為例,解釋“對齊”和“補齊”概念。

#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

總之,對齊是某種類型的初始位置在內存上的限定,補齊是對該類型大小的限定,兩者共同組成了該類型在內存上的排布規則,提高操作效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM