卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

c語言結構體對齊規(guī)則 內存對齊的目的和規(guī)則?

內存對齊的目的和規(guī)則?有四種內存對齊原則:1)。數據成員對齊規(guī)則:結構(或聯合)的數據成員。第一個數據成員放置在偏移量為0的位置。之后,每個數據成員存儲的起始位置從該成員大小或其子成員大小的整數倍開始

內存對齊的目的和規(guī)則?

有四種內存對齊原則:

1)。數據成員對齊規(guī)則:結構(或聯合)的數據成員。第一個數據成員放置在偏移量為0的位置。之后,每個數據成員存儲的起始位置從該成員大小或其子成員大小的整數倍開始(只要該成員有子成員,如數組、結構等)(例如,在32位計算機中int為4字節(jié),則應從4的整數倍地址開始存儲)?;绢愋筒话╯truct/class/Uinon。

2) . struct as member:如果一個結構中有一些結構成員,那么應該從結構中“最寬的基本類型成員”的整數倍地址存儲結構成員。(結構a包含結構B,而B包含char、int、double和其他元素,那么B應該從8的整數倍存儲。)。

3) . 收尾工作:結構的總尺寸,即sizeof的結果,必須是結構內部最大構件的“最寬基本型構件”的整數倍。彌補不足。(基本類型不包括struct/class/Uinon)。

4) . sizeof(Union),結構中最大的元素是Union的大小,因為在特定時間,只有Union的一個成員實際存儲在地址中。

內存對齊的規(guī)則?

為了加快計算機的訪問速度,編譯器在默認情況下對內存進行字節(jié)對齊。結構(包括類)字節(jié)對齊的原則如下:

1)結構變量的第一個地址可以除以其最寬的基本類型成員的大??;

2)結構的每個成員相對于結構的第一個地址的偏移量是成員大小的整數倍。如果需要,編譯器將在成員之間添加內部加法;

3)結構的總大小是結構最寬基本類型成員大小的整數倍。如果需要,編譯器將在最后一個成員之后添加尾隨填充。Structsbyte1{double//offset 0~7charj//offset 8inta//offset 12~15,因為9不能被4除,請先填寫9~11}sizeof(sbyte1)//=16structsbyte2{charj//offset 0double//offset 8~15,因為1不能被8除,請先填寫1~7inta//offset 16~19}sizeof(sbyte2)//=24,為了使倍數為8,填寫20~23

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

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

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

如何理解struct的內存對齊?

Commons:sizeof(Union data1)的值是16。默認情況下,Commons的最大基本類型是double,它占用8個字節(jié),因此Commons與8對齊。字符數組C2占用9字節(jié),因此整個公共體應該占用9字節(jié),但根據對齊原則,實際分配給它的內存是16字節(jié)。Struct:Struct數據與8字節(jié)對齊,long類型的成員1分配8字節(jié)。s、 I、C和a最初分別占用4、2、1和10字節(jié)??紤]到對齊方式,s分配4個字節(jié),I分配2個字節(jié),C分配2個字節(jié)。此時,8個字節(jié)剛剛用完。最初分配了10個字節(jié)??紤]到對齊,整個結構占用的存儲空間是8的倍數,因此分配了16個字節(jié)。因此,結構數據占用84216=32字節(jié)。