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