c語言結(jié)構(gòu)體對齊規(guī)則 如何理解按邊界對齊的數(shù)據(jù)存儲?
如何理解按邊界對齊的數(shù)據(jù)存儲?1 32位處理器,也就是說,CPU一次從內(nèi)存中讀取4字節(jié)的數(shù)據(jù)。2邊界對齊,即為了存儲一定長度的M字節(jié)的數(shù)據(jù),存儲地址需要存儲為M字節(jié)的整數(shù)倍,結(jié)構(gòu)的整體大小是最大成員長
如何理解按邊界對齊的數(shù)據(jù)存儲?
1 32位處理器,也就是說,CPU一次從內(nèi)存中讀取4字節(jié)的數(shù)據(jù)。2邊界對齊,即為了存儲一定長度的M字節(jié)的數(shù)據(jù),存儲地址需要存儲為M字節(jié)的整數(shù)倍,結(jié)構(gòu)的整體大小是最大成員長度的整數(shù)倍。
內(nèi)存對齊的目的和規(guī)則?
有四種內(nèi)存對齊原則:
1)。數(shù)據(jù)成員對齊規(guī)則:結(jié)構(gòu)(或聯(lián)合)的數(shù)據(jù)成員。第一個數(shù)據(jù)成員放置在偏移量為0的位置。之后,每個數(shù)據(jù)成員存儲的起始位置從成員大小或其子成員大小的整數(shù)倍開始(只要成員有子成員,如數(shù)組、結(jié)構(gòu)等)(例如,如果在32位計算機中int是4字節(jié),則應(yīng)從4的整數(shù)倍地址開始存儲)?;绢愋筒话╯truct/class/Uinon。
2) . struct as member:如果一個結(jié)構(gòu)中有一些結(jié)構(gòu)成員,那么應(yīng)該從結(jié)構(gòu)中“最寬的基本類型成員”的整數(shù)倍地址存儲結(jié)構(gòu)成員。(結(jié)構(gòu)a包含結(jié)構(gòu)B,而B包含char、int、double和其他元素,那么B應(yīng)該從8的整數(shù)倍存儲。)。
3) . 收尾工作:結(jié)構(gòu)的總尺寸,即sizeof的結(jié)果,必須是結(jié)構(gòu)內(nèi)部最大構(gòu)件的“最寬基本型構(gòu)件”的整數(shù)倍。彌補不足。(基本類型不包括struct/class/Uinon)。
4) . sizeof(Union),結(jié)構(gòu)中最大的元素是Union的大小,因為在特定時間,只有Union的一個成員實際存儲在地址中。