C語言記憶體位元組對齊小結

2021-08-18 17:15:22 字數 694 閱讀 1043

兩句話

(1)各成員變數在結構體(類)中的位址偏移是自身大小(或與指定對齊係數之間較小者)的整數倍;

(2)結構體(類)大小是最大成員變數(或與指定對齊係數之間較小者)整數倍;

環境

在64位機器環境。

1、舉例一:

struct aaaa;
結果,sizeof(aa)=12

分析:a佔1byte;b佔4byte,b的偏移為自身大小(4byte)整數倍,所以a後面有3byte補齊,所以到b有8byte;c佔1byte,此時總共9byte。又因為總數為最大成員(b,佔4byte)整數倍,所以後面又有3byte補齊,總共12byte。

2、舉例二:

struct aaaa;
sizeof(aa)=8

3、舉例三:

#pragma pack(2)//取最小

struct aaaa;

sizeof(aa)=8

如果pragma pack和__attribute__

同時指定呢?以__attribute__ 的為準。

需要說明的是,不管pragma

pack和__attribute__如何指定,結構體內部成員的自對齊仍然按照其自身的對齊值。

C語言記憶體位元組對齊小結

在c語言面試和考試中經常會遇到記憶體位元組對齊的問題。今天就來對位元組對齊的知識進行小結一下。首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組 每位元組8個位,計算機基礎知識,別說不知道 位元組對齊有什麼好處?以int...

C語言記憶體位元組對齊小結

在c語言面試和考試中經常會遇到記憶體位元組對齊的問題。今天就來對位元組對齊的知識進行小結一下。首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組 每位元組8個位,計算機基礎知識,別說不知道 位元組對齊有什麼好處?以int...

C語言 位元組對齊(記憶體對齊)

1 平台原因 移植原因 不是所有的硬體平台都能訪問任意位址上的任意資料,某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常 2 硬體原因 經過記憶體對齊之後,cpu的記憶體訪問速度大大提公升。1.對齊原則 原則1 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,...