首頁>Club>
5
回覆列表
  • 1 # 使用者2572909421957

    主要是因為對齊。每種型別分配到的記憶體地址需要按照一定的大小來進行對齊,整個結構體也是需要對齊的。比如說`double`一般是8byte對齊,那麼一個double的起始地址就必須是被8整除的。

    參考:

    Data structure alignment

    物件 - cppreference.com

    --------------------------------------------------

    原來的分佈:

    char a: 1 byte, space:3 byte, int b:4 byte,

    char c:1 byte, space: 7 byte,

    double d: 8 byte

    ----------------------------------------------------

    去掉`char a`的分佈:

    int b:4 byte, char c:1 byte, space: 3 byte,

    double d: 8 byte

    ----------------------------------------------------

    說明對齊的一段程式碼:

    執行結果是: 1 4 1 8 8。不同的平臺也許會不同

  • 中秋節和大豐收的關聯?
  • 我是一個寶媽,想在網上找點兼職,有靠譜的嗎?