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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么在x86上自然對(duì)齊變量的整數(shù)賦值是原子的?

為什么在x86上自然對(duì)齊變量的整數(shù)賦值是原子的?

C C++
楊魅力 2019-06-15 18:10:42
我一直在讀這個(gè)文章關(guān)于原子操作,它提到了在x86上32位整數(shù)賦值是原子的,只要變量是自然對(duì)齊的。為什么天然排列保證原子性?
查看完整描述

3 回答

?
繁花不似錦

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果32位或更小的對(duì)象在內(nèi)存的“正?!辈糠謨?nèi)自然對(duì)齊,則除80386 sx以外的任何80386或兼容處理器都可以在一次操作中讀取或?qū)懭雽?duì)象的所有32位。雖然平臺(tái)以快速和有用的方式完成某件事情的能力并不一定意味著該平臺(tái)出于某種原因有時(shí)不會(huì)以其他方式進(jìn)行操作,而且我相信,在許多x86處理器上,即使不是所有的x86處理器,也有可能擁有一次只能訪問8或16位的內(nèi)存區(qū)域,但我認(rèn)為英特爾從未定義過任何條件,要求對(duì)“正?!眱?nèi)存區(qū)域進(jìn)行對(duì)齊的32位訪問會(huì)導(dǎo)致系統(tǒng)在不讀取或?qū)懭胝麄€(gè)內(nèi)存的情況下讀取或?qū)懭氩糠种?,我不認(rèn)為英特爾有任何意圖來定義任何這樣的東西“正?!钡挠洃泤^(qū)域。


查看完整回答
反對(duì) 回復(fù) 2019-06-15
?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊

自然對(duì)齊意味著類型的地址是類型大小的倍數(shù)。

例如,字節(jié)可以位于任意地址,短字節(jié)(假定16位)必須位于2的倍數(shù)上,int(假設(shè)32位)必須位于4的倍數(shù)上,長(zhǎng)(假設(shè)64位)必須位于8的倍數(shù)上。

如果您訪問了一段未自然對(duì)齊的數(shù)據(jù),CPU要么會(huì)引發(fā)故障,要么會(huì)讀寫內(nèi)存,而不是作為原子操作。CPU所采取的操作將取決于體系結(jié)構(gòu)。

例如,圖像中的內(nèi)存布局如下:

01234567...XXXX.

int *data = (int*)3;

當(dāng)我們?cè)囍喿x*data組成該值的字節(jié)分布在2個(gè)int大小塊中,1個(gè)字節(jié)位于塊0-3中,3個(gè)字節(jié)分布在塊4-7中?,F(xiàn)在,僅僅因?yàn)檫@些塊在邏輯上是相鄰的,這并不意味著它們是物理上的。例如,塊0-3可能位于CPU緩存行的末尾,而塊3-7位于頁文件中。當(dāng)CPU進(jìn)入訪問塊3-7以獲得它所需的3個(gè)字節(jié)時(shí),它可能會(huì)看到該塊不在內(nèi)存中,并發(fā)出它需要內(nèi)存分頁的信號(hào)。這可能會(huì)阻塞調(diào)用進(jìn)程,而操作系統(tǒng)會(huì)將內(nèi)存重新分頁。

在內(nèi)存被分頁之后,但是在您的進(jìn)程被喚醒之前,另一個(gè)進(jìn)程可能會(huì)出現(xiàn)并編寫一個(gè)Y然后您的進(jìn)程被重新安排,CPU完成讀取,但是現(xiàn)在它已經(jīng)讀取了XYXX,而不是您期望的XXXX。


查看完整回答
反對(duì) 回復(fù) 2019-06-15
  • 3 回答
  • 0 關(guān)注
  • 945 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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