data alignment

計(jì)算機(jī)中為什么需要數(shù)據(jù)對(duì)齊?
-數(shù)據(jù)對(duì)齊之后可以提高處理器從內(nèi)存中讀取數(shù)據(jù)的效率。例如,4個(gè)字節(jié)的整數(shù)類(lèi)型如果從奇數(shù)地址開(kāi)始存儲(chǔ),那么處理器需要兩次讀取才能將該整數(shù)讀出,如果從是其倍數(shù)的地址開(kāi)始讀取,則只需讀取一次,這樣對(duì)處理起來(lái)說(shuō)開(kāi)銷(xiāo)更小。
數(shù)據(jù)對(duì)齊規(guī)則:
  1. 每個(gè)數(shù)據(jù)類(lèi)型的起始地址應(yīng)該為此數(shù)據(jù)類(lèi)型所占字節(jié)數(shù)的整數(shù)倍。
  2. 對(duì)于結(jié)構(gòu)體類(lèi)型的數(shù)據(jù),數(shù)據(jù)所占字節(jié)數(shù)應(yīng)該為結(jié)構(gòu)體內(nèi)字段的最大對(duì)齊數(shù),也就是占字節(jié)數(shù)最多的數(shù)據(jù)類(lèi)型。
因此,大多數(shù)情況下,應(yīng)該使得所聲明的結(jié)構(gòu)體類(lèi)型所占字節(jié)數(shù)最少。

e.g.

package main

import (
    "fmt"
    "unsafe"
)

type structA struct {
    a byte
    b int16
}

type structB struct {
    a int16
    b byte
    c int32
}

type structC struct {
    a byte
    b int64
    c int32
}

type structD struct {
    a int64
    b int32
    c byte
}

func main() {
    fmt.Printf("sizeof(structA) = %d\n", unsafe.Sizeof(structA{}))
    fmt.Printf("sizeof(structB) = %d\n", unsafe.Sizeof(structB{}))
    fmt.Printf("sizeof(structC) = %d\n", unsafe.Sizeof(structC{}))
    fmt.Printf("sizeof(structD) = %d\n", unsafe.Sizeof(structD{}))
}

output:
sizeof(structA) = 4                1 + pad(1) + 2
sizeof(structB) = 8                2 + 1 + pad(1) + 4
sizeof(structC) = 24              1 + pad(7) + 8 + 4 + pad(4)
sizeof(structD) = 16              8 + 4 + 1 + pad(3)
對(duì)于struct類(lèi)型中包含struct類(lèi)型的情況,將struct中的字段類(lèi)型全部轉(zhuǎn)換成基本的數(shù)據(jù)類(lèi)型,然后計(jì)算。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,333評(píng)論 6 13
  • @[c++|struct] 今天在編程中碰到一個(gè)坑,搞的調(diào)試了半天,最后發(fā)現(xiàn)程序中在寫(xiě)數(shù)據(jù)和讀取數(shù)據(jù)時(shí)結(jié)構(gòu)體定義不...
    drybeans閱讀 3,858評(píng)論 1 11
  • 轉(zhuǎn)載 結(jié)構(gòu)體對(duì)齊詳解 結(jié)構(gòu)體數(shù)據(jù)成員對(duì)齊的意義 許多實(shí)際的計(jì)算機(jī)系統(tǒng)對(duì)基本類(lèi)型數(shù)據(jù)在內(nèi)存中存放的位置有限制,它們會(huì)...
    erU閱讀 530評(píng)論 0 3
  • Words: happy: glad, excited, pleased, tasty: yummy, delic...
    享悅moonlight閱讀 180評(píng)論 0 0
  • 曾經(jīng),那個(gè)永遠(yuǎn)在遠(yuǎn)處望著他的少女,走過(guò)一路櫻花,簪著芬芳的潔白花朵,站在他面前,溫柔的微笑。 “你可以留下來(lái)嗎?”...
    月下旬閱讀 305評(píng)論 0 0

友情鏈接更多精彩內(nèi)容