第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

結(jié)構(gòu)填料和包裝

結(jié)構(gòu)填料和包裝

C C++
偶然的你 2019-05-29 17:26:05
結(jié)構(gòu)填料和包裝考慮:struct mystruct_A{    char a;    int b;    char c;} x;struct mystruct_B{    int b;    char a;} y;結(jié)構(gòu)的尺寸分別為12和8。這些結(jié)構(gòu)是填充還是包裝?什么時候進(jìn)行填充或包裝?
查看完整描述

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ù)(可以使用交換空間,但速度要慢得多)。您可以在程序中安排變量,直到填充最少(因為它在其他一些答案中得到了很好的例證),但如果這還不夠,您可以明確禁用填充,這就是打包


查看完整回答
反對 回復(fù) 2019-05-29
  • 3 回答
  • 0 關(guān)注
  • 559 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號