之所以會有資料對齊是因為訪問記憶體的硬體電路特性。位址匯流排按對齊位址訪問,以4自己對齊為例。如果想得到0x00000001開始的4個位元組內容,系統需要以0x00000000開始讀4個位元組,取後面3個,再以0x00000004開始讀4個位元組取第乙個,組合得到想要的4個位元組。這樣取數的速度就會變慢,增加系統負擔,降低效能。如果一開始就對齊到0x00000000,就只需要一次讀寫即可。
class a1;
classa2;
sizeof(a1);
sizeof(a2);
因為靜態變數是放在全域性資料區,而sizeof是計算棧中分配的大小,所以sizeof(a1)是4.
為了方便對結構體內元素的訪問和管理,以結構體裡面最長元素為對齊單位,結構體的長度一定是最長的資料元素的整數倍。如果大於處理器位數,以處理器位數為對齊單位。a2以8為對齊單位,sizeof(a12)是24.
sizeof與記憶體對齊
記憶體對齊三原則 第乙個資料從0開始,以後每個資料要從他本身大小的整數倍開始存 如果這個資料是個結構體或者陣列,則從其最大元素的整數倍開始存 最後收尾要是最大成員的整數倍,不足補齊 對齊方式 變數存放的起始位址相對於結構的起始位址的偏移量 char 偏移量必須為sizeof char 即1的倍數 i...
位元組對齊與sizeof
本文主要包括二個部分,第一部分重點介紹在vc中,怎麼樣採用sizeof來求結構的大小,以及容易出現的問題,並給出解決問題的方法,第二部分總結出vc中sizeof的主要用法。1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現...
sizeof 與 位元組對齊
sizeof是運算子,可用於任何變數名 型別名或常量值,當用於變數名 不是陣列名 或常量時,它不需要用圓括號。它在編譯時起作用,而不是執行時。這是初學者問得最多的乙個問題,所以這裡有必要多費點筆墨。讓我們先看乙個結構體 struct s1 問sizeof s1 等於多少聰明的你開始思考了,char佔...