3 回答

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