c語(yǔ)言結(jié)構(gòu)體對(duì)齊規(guī)則 C語(yǔ)言結(jié)構(gòu)體與共用體的應(yīng)用?
C語(yǔ)言結(jié)構(gòu)體與共用體的應(yīng)用?公共體:sizeof(Union data1)的值是16。默認(rèn)情況下,公共正文的最大基本類型是double,它占用8個(gè)字節(jié),因此公共正文與8對(duì)齊。字符數(shù)組C2占用9字節(jié),因
C語(yǔ)言結(jié)構(gòu)體與共用體的應(yīng)用?
公共體:sizeof(Union data1)的值是16。默認(rèn)情況下,公共正文的最大基本類型是double,它占用8個(gè)字節(jié),因此公共正文與8對(duì)齊。字符數(shù)組C2占用9字節(jié),因此整個(gè)公共體應(yīng)該占用9字節(jié),但根據(jù)對(duì)齊原則,實(shí)際分配給它的內(nèi)存是16字節(jié)。Struct:Struct數(shù)據(jù)與8字節(jié)對(duì)齊,long類型的成員1分配8字節(jié)。s、 I、C和a最初分別占用4、2、1和10字節(jié)。考慮到對(duì)齊方式,s分配4個(gè)字節(jié),I分配2個(gè)字節(jié),C分配2個(gè)字節(jié)。此時(shí),8個(gè)字節(jié)剛剛用完。最初分配了10個(gè)字節(jié)??紤]到對(duì)齊,整個(gè)結(jié)構(gòu)占用的存儲(chǔ)空間是8的倍數(shù),因此分配了16個(gè)字節(jié)。因此,結(jié)構(gòu)數(shù)據(jù)占用84216=32字節(jié)。
C語(yǔ)言結(jié)構(gòu)體所占用的字節(jié)數(shù)如何計(jì)算?
對(duì)齊模數(shù)的計(jì)算方法:數(shù)據(jù)類型的對(duì)齊模數(shù)等于內(nèi)存中數(shù)據(jù)類型變量占用的字節(jié)數(shù)。內(nèi)存中結(jié)構(gòu)變量占用字節(jié)數(shù)的計(jì)算方法:
1。結(jié)構(gòu)變量的成員按順序存儲(chǔ),但不一定連續(xù)存儲(chǔ)。
2. 結(jié)構(gòu)變量中每個(gè)成員的存儲(chǔ)位置(相對(duì)于結(jié)構(gòu)變量的第一個(gè)地址)必須是其對(duì)齊模數(shù)的整數(shù)倍。
3. 內(nèi)存中整個(gè)結(jié)構(gòu)變量占用的字節(jié)數(shù)必須是所有成員的對(duì)齊模數(shù)最大值的整數(shù)倍。