成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

c語言struct字節(jié)對齊 結(jié)構(gòu)體成員的字節(jié)對齊?

結(jié)構(gòu)體成員的字節(jié)對齊?如何編程實現(xiàn)struct字節(jié)對齊問題?結(jié)構(gòu)體字節(jié)對齊原則?24(如果按8字節(jié)對齊,則先前的intfloat僅為8字節(jié),雙8字節(jié),char構(gòu)成8字節(jié)=24)struct PP{in

結(jié)構(gòu)體成員的字節(jié)對齊?

如何編程實現(xiàn)struct字節(jié)對齊問題?

結(jié)構(gòu)體字節(jié)對齊原則?

24(如果按8字節(jié)對齊,則先前的intfloat僅為8字節(jié),雙8字節(jié),char構(gòu)成8字節(jié)=24)

struct PP{int afload B char D}OO sizeof(OO)12字節(jié),它是按照4字節(jié)對齊的

對齊與內(nèi)存中數(shù)據(jù)的位置有關(guān)。如果變量的內(nèi)存地址是其長度的整數(shù)倍,則稱為自然對齊。例如,在32位CPU中,如果整數(shù)變量的地址是0x00000004,則它自然對齊。字節(jié)對齊的根本原因是CPU訪問數(shù)據(jù)的效率。假設(shè)上面整數(shù)變量的地址不是自然對齊的,例如0x00000002,那么CPU需要訪問內(nèi)存兩次,如果它接受它的值。第一次從0x00000002-0x00000003取短,第二次從0x00000004-0x00000005取短,然后合并得到所需的數(shù)據(jù)。如果變量的地址為0x00000003,則需要訪問內(nèi)存三次,第一次訪問char,第二次訪問簡稱char,第三次訪問char,然后合并得到整數(shù)數(shù)據(jù)。如果變量處于自然對齊位置,則只能檢索一次數(shù)據(jù)。有些系統(tǒng)對對齊非常嚴格,如SPARC系統(tǒng)。如果獲取未對齊的數(shù)據(jù),則會發(fā)生錯誤。例如,char ch[8]char*P=& ch[1]int i=*(int*)P在運行時會報告為段錯誤,而X86上不會有錯誤,但效率會降低。

如何理解struct的內(nèi)存對齊?

C中的結(jié)構(gòu)對齊問題:結(jié)構(gòu)占用的位數(shù)是數(shù)據(jù)的整數(shù)倍,結(jié)構(gòu)成員占用的位數(shù)最長。在這種結(jié)構(gòu)中,結(jié)構(gòu)占用的比特數(shù)是雙重類型的整數(shù)倍。雖然這種結(jié)構(gòu)使用位場,但對結(jié)果沒有影響。Int i占用四個字節(jié),char J占用一個字節(jié)。這兩個字節(jié)總共占用八個字節(jié),盡管最后三個字節(jié)是無用的。inta本身占用4個字節(jié),但與結(jié)構(gòu)對齊需要8個字節(jié)。雙B需要8個字節(jié)。總共8=24字節(jié)

例如,在16位計算機中,變量按2字節(jié)對齊。例如,雖然成員a是char類型,但是下一個成員B的地址在0x80000000中只有1個字節(jié),但是下一個成員B的地址不能是0x80000001,而必須是0x80000002,根據(jù)字長對齊。上述結(jié)構(gòu)占用的空間為24 28=16字節(jié)