3 回答

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
我知道這個(gè)問(wèn)題很老,這里的大多數(shù)答案都很好地解釋了填充,但是在我自己試圖理解它時(shí),我覺(jué)得有一個(gè)“視覺(jué)”形象正在發(fā)生的事情有所幫助。
處理器以確定大?。ㄗ郑┑摹皦K”讀取存儲(chǔ)器。假設(shè)處理器字長(zhǎng)8個(gè)字節(jié)。它會(huì)將內(nèi)存視為8字節(jié)構(gòu)建塊的大行。每當(dāng)它需要從內(nèi)存中獲取一些信息時(shí),它將到達(dá)其中一個(gè)塊并獲得它。
如上圖所示,Char(長(zhǎng)度為1個(gè)字節(jié))的位置無(wú)關(guān)緊要,因?yàn)樗挥谄渲幸粋€(gè)塊內(nèi)部,要求CPU只處理1個(gè)字。
當(dāng)我們處理大于一個(gè)字節(jié)的數(shù)據(jù)時(shí),如4字節(jié)的int或8字節(jié)的雙字節(jié),它們?cè)趦?nèi)存中的對(duì)齊方式會(huì)對(duì)CPU必須處理的字?jǐn)?shù)產(chǎn)生影響。如果4字節(jié)塊以某種方式對(duì)齊,它們總是適合塊的內(nèi)部(存儲(chǔ)器地址是4的倍數(shù)),則只需要處理一個(gè)字。否則,一個(gè)4字節(jié)的塊可能在一個(gè)塊上有一部分,而在另一個(gè)塊上有一部分,要求處理器處理2個(gè)字以讀取該數(shù)據(jù)。
這同樣適用于8字節(jié)的雙精度數(shù),除非它現(xiàn)在必須在8的存儲(chǔ)器地址中,以保證它總是在一個(gè)塊內(nèi)。
這考慮了一個(gè)8字節(jié)的字處理器,但這個(gè)概念適用于其他大小的字。
填充通過(guò)填充這些數(shù)據(jù)之間的間隙來(lái)確保它們與這些塊對(duì)齊,從而在讀取內(nèi)存時(shí)提高性能。
然而,正如其他人所說(shuō)的那樣,有時(shí)候空間比表演本身更重要。也許你在沒(méi)有太多RAM的計(jì)算機(jī)上處理大量數(shù)據(jù)(可以使用交換空間,但速度要慢得多)。您可以在程序中安排變量,直到填充最少(因?yàn)樗谄渌恍┐鸢钢械玫搅撕芎玫睦C),但如果這還不夠,您可以明確禁用填充,這就是打包。
- 3 回答
- 0 關(guān)注
- 564 瀏覽
添加回答
舉報(bào)