亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2389 | 回復(fù): 8
打印 上一主題 下一主題

[內(nèi)存管理] valotile 與 cache的關(guān)系 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-09-23 20:33 |只看該作者 |倒序?yàn)g覽
請(qǐng)大家都來(lái)討論下volatile與 cache的關(guān)系。

我的理解是:valotile只是告訴編譯器不要做優(yōu)化代碼的處理。
如volatile修改的變量,也是cacheable的,那么如下代碼:
volatile unsigned char * addp = (volatile unsigned char * )0xc0007000;
int val1,val2;
val1 = *addp;
val2 = *addp;
假設(shè)addp所指向的地址是可以cahe的。
那么第一次給val1付值得時(shí)候,是從內(nèi)存去取值。
而第二次就很可能就直接是從cpu的data cache中去取值吧?

不知道我的理解是否對(duì),請(qǐng)大家來(lái)討論下!

論壇徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16賽季CBA聯(lián)賽之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金雞報(bào)曉
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年紀(jì)念徽章
日期:2016-11-09 13:19:1015-16賽季CBA聯(lián)賽之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-03 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-09 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-07-03 08:39:42
2 [報(bào)告]
發(fā)表于 2013-09-23 21:10 |只看該作者
你說(shuō)的cache的那一段是正確的,但是跟volatile沒(méi)有關(guān)系。volatile只會(huì)影響編譯器生成的代碼,不會(huì)影響CPU對(duì)內(nèi)存的cache刷洗

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-09-23 22:01 來(lái)自手機(jī) |只看該作者
我覺(jué)得正因?yàn)榧恿藇olatile,所以編譯器應(yīng)該插入使cache無(wú)效的指令,從而導(dǎo)致第二次再去內(nèi)存中取

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-09-23 22:07 |只看該作者
volatile純給編譯器看的東西,可以對(duì)比下加不加的匯編代碼

cache不cache在于你所用的內(nèi)存頁(yè)是否帶有cache或uncache屬性,
普通常用內(nèi)存一般都是cache的,dma外設(shè)用的一般不cache,是因?yàn)橥庠O(shè)操作的時(shí)候會(huì)有時(shí)序問(wèn)題,需要刷cache

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-09-24 08:52 來(lái)自手機(jī) |只看該作者
更正下,volatile跟cache沒(méi)關(guān)系,只是防止編譯器優(yōu)化代碼,不能保證第二次不去cache中取代碼,如果需要保證cache一致性,需要添加另外的指令

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2013-09-24 10:24 |只看該作者
我做了如下的試驗(yàn):
源代碼:
#include <stdio.h>

int main()
{
   unsigned int *addp = (unsigned int*)0x80000000;
   int val1,val2;
   val1 = *addp;
   val2 = *addp;
   return val1+val2*2;
}
arm-none-linux-gnueabi-gcc -O2 volatile_test.c -o volatile
arm-none-linux-gnueabi-objdump -D volatile > volatile.dmp
cat volatile.dmp:
000083fc <main>:
    83fc:       e3a03102        mov     r3, #-2147483648        ; 0x80000000
    8400:       e5930000        ldr     r0, [r3]---------------------->去到內(nèi)存,只取了一次值
    8404:       e0800080        add     r0, r0, r0, lsl #1
    8408:       e12fff1e        bx      lr

將以上源代碼添加volatile關(guān)鍵字,修改如下:
#include <stdio.h>

int main()
{
   volatile unsigned int *addp = (volatile unsigned int*)0x80000000;
   int val1,val2;
   val1 = *addp;
   val2 = *addp;
   return val1+val2*2;
}
重復(fù)執(zhí)行以上過(guò)程,反匯編,然后cat volatile.dmp:

000083fc <main>:
    83fc:       e3a03102        mov     r3, #-2147483648        ; 0x80000000
    8400:       e5932000        ldr     r2, [r3]------------------------->去到內(nèi)存取第一次值
    8404:       e5930000        ldr     r0, [r3]------------------------->去到內(nèi)存取第二次值
    8408:       e0820080        add     r0, r2, r0, lsl #1
    840c:       e12fff1e        bx      lr


注意以上的編譯過(guò)程,都需要加上優(yōu)化編譯開(kāi)關(guān):-O2

回復(fù) 4# unbutun


   

論壇徽章:
2
酉雞
日期:2013-09-26 11:11:15摩羯座
日期:2014-01-08 13:45:19
7 [報(bào)告]
發(fā)表于 2013-09-24 10:34 |只看該作者
回復(fù) 1# xiaojsj


    volatile 和cache 沒(méi)關(guān)系
是告訴編譯器不要優(yōu)化的從寄存器取值,每次要從內(nèi)存取

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
8 [報(bào)告]
發(fā)表于 2013-09-24 10:57 |只看該作者
volatile和cache沒(méi)有任何關(guān)系

volatile只是告訴gcc,不要優(yōu)化
比如你連續(xù)讀取一個(gè)地址,gcc可能給你優(yōu)化為第一次將這個(gè)地址的內(nèi)容讀到某個(gè)寄存器中,然后后面的讀取操作就全部去寄存器中讀取了
如果你是讀取的設(shè)備寄存器來(lái)做一個(gè)polling,這么優(yōu)化下來(lái)顯然邏輯就不對(duì)了

cache與否是頁(yè)表項(xiàng)來(lái)控制的,和volatile完全沒(méi)關(guān)系

開(kāi)關(guān)cache只能靠kernel里的代碼來(lái)做;而volatile是給gcc用的,他不能控制你的cache開(kāi)關(guān)與否

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2013-09-26 09:56 |只看該作者
理解,謝謝。回復(fù) 8# arm-linux-gcc


   
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP