關於記憶體對齊

2021-04-02 02:29:46 字數 491 閱讀 9762

早上看了乙個網友貼的面試題,

struct st

int i;  short  s; char c;

sizeof(struct st) 是多少?

int 4,short 2,char 1,但是sizeof(st)是8。這個就是記憶體對齊

再來看個例子:struct strt1;

strt1 s1;

假設s1.c1位址為0;則s1.s位址為2 ; s1.c2位址為4 ; s1.i位址為 8。sizeof(s1)是12

這個是因為一般來說,記憶體之中偶數字址是自然邊界。為了提高程式效能,一般都要向自然邊界對齊,原因是不對齊的話,如果跨越邊界,訪問乙個變數可能需要兩次讀操作。例如上面例子中,c2後位址為6。但是int 要站記憶體4b,如果跨越8就需要讀兩次,所以就從8開始。則sizeof(s1)是12

當然,可以自己構造結構體的順序來提高程式設計質量

struct strt2;位址是0   1   2   4 sizeof是8;

關於記憶體對齊

資料傳送到網路板的資料報大小根本不是實際控制數 據包的大小 這時我才想起乙個人,stanley b.lippman,他寫的那 一本書 inside object modale 曾經提過這樣的事 情,編譯器為了提高cpu的效率,會對struct 的結構進行優化,利用sizeof 可以得出不同的計算機上...

關於記憶體對齊

資料傳送到網路板的資料報大小根本不是實際控制資料報的大小 這時我才想起乙個人,stanley b.lippman,他寫的那一本書 inside object modale 曾經提過這樣的事情,編譯器為了提高cpu的效率,會對struct 的結構進行優化,利用sizeof 可以得出不同的計算機上對 s...

關於記憶體對齊

首先由乙個程式引入話題 1 環境 vc6 windows sp2 2 程式13 include 45 using namespace std 67 struct st1 8 1314 struct st215 20 21int main 2227 程式的輸出結果為 sizeof st1 is 12 ...