LinuxDev 板


LINE

不太一样..volatile是说不要最佳化 例如对一些I/O mapping 的区段 你做最佳化就有可能有问题 ex. compiler 会reorder 今天有一个炸弹,要先设定时间,然後开始倒数 原本你的设计是 start_bomb(){ instruction 1: set the timer instruction 2: countdown! } 接着就快跑人啦XD.. compiler觉得reorder一下比较好..於是生出以下的code start_bomb(){ instruction 1: countdown! instruction 2: set the timer } 假使timer initial value是0 那会怎样哩?xd http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.4 http://en.wikipedia.org/wiki/Memory_barrier#Out-of-order_execution_versus_compiler_reordering_optimizations 截一段 "In C and C++, the volatile keyword was intended to allow C and C++ programs to directly access memory-mapped I/O. Memory-mapped I/O generally requires that the reads and writes specified in source code happen in the exact order specified with no omissions" ※ 引述《RouterHsieh (醉卧美人膝,醒掌天下权)》之铭言: : 就小弟所知,用asmlinkage当修饰字的话, : 该函数的参数在传递时会从stack读取而非从register。 : 一般而言,似乎只要是system call都会加上这个修饰字。 : 那我想问的是,之所以会有这样的需求, : 其原因是否跟使用volatile是类似的呢? : 这问题想了一天了而且也有孤狗过,不过没找到一个确切的理由或者说法就是了囧 : 还请板上的高手们多多指教(拜) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.191.195 ※ 编辑: mayasky 来自: 114.43.191.195 (11/01 03:04) ※ 编辑: mayasky 来自: 114.43.191.195 (11/01 03:05)
1F:推 troylee:老实说我觉得这例子不好.. 11/01 20:41
2F:→ mayasky:我只是想给的通用有趣的概念罢了..不如楼上给个real case 11/02 01:56
3F:→ mayasky:记得考量读者熟哪种arch,你所预计的issue与execute 方式罗 11/02 01:57
4F:→ mayasky:这样应该你比说这句话有意义:) 11/02 01:58
5F:推 troylee:所以你考量了读者熟悉的arch, 请问是哪一种arch呢? 11/02 23:45
6F:→ mayasky:因为不知读者熟哪种,所以抽象化.不特定arch 11/04 01:05
7F:→ mayasky:给个pseudo code即可,相信您念书时很多书也如此:) 11/04 01:06
※ 编辑: mayasky 来自: 1.160.132.131 (11/04 01:26)
8F:推 troylee:一下说要 real case, 一下又要抽象化... 11/04 01:28
9F:→ troylee:一下要考量读者的熟悉哪种arch, 最後又说不知道他熟哪种 11/04 01:31
10F:→ mayasky:REAL CASE和实作抽象化是两回事.演算法都不是real case? 11/04 01:33
11F:→ mayasky:但很多演算法书只用pseudo code..这样回答疑问了吗? 11/04 01:34
12F:推 troylee:那请问您的real case中, 如何使用到volatile? 11/04 01:35
13F:→ mayasky:很多paper为了让读者不管惯用哪种language都可以理解 11/04 01:37
14F:推 troylee:我所谓的例子举的不好是说前面说 Memory-mapped I/O 最佳 11/04 01:37
15F:→ troylee:化後可能会有问题, 但是後面给的例子却是 reordering 的 11/04 01:38
16F:→ mayasky:以及考量简化就会使用pseudo code..这就是考量读者 11/04 01:38
17F:→ troylee:那如果您要避免这种reordering最佳化, 请问 volatile 是要 11/04 01:38
18F:→ troylee:如何在您的例子上避免呢? 11/04 01:39
19F:→ mayasky:reorder在非I/O应该不会有事...在I/O可能会有事 11/04 01:40
20F:推 troylee:你确定吗? 11/04 01:41
21F:→ troylee:要避免compiler对这个例子作最佳化, 所以把volatile放在 11/04 01:42
22F:→ mayasky:几乎确定~可以参考ARM的strongly ordered与device 之设计 11/04 01:42
23F:→ troylee:start_bomb() 前面搂? 11/04 01:42
24F:→ mayasky:基本上这关键字就是叫compiler不要帮你最佳化 11/04 01:44
25F:→ mayasky:所以理论上放这前面是ok的..只要他compiler有做 11/04 01:44
26F:→ mayasky:但或许不是每个compiler都有做..甚至有的compiler不接受 11/04 01:45
27F:→ mayasky:如果你想要个真的code..或许哪天我看到我贴一下 11/04 01:46
28F:→ mayasky:compiler啥时想reorder我不知道..一时生不出来 11/04 01:47
※ 编辑: mayasky 来自: 1.160.132.131 (11/04 01:50)
29F:→ mayasky:欲知更详细..上面wiki似乎有带到一些.请参阅 11/04 01:51
※ 编辑: mayasky 来自: 1.160.132.131 (11/04 01:55)
30F:推 troylee:谢谢 所以你的例子应该是把 volatile 放在 timer 的regist 11/04 01:57
31F:→ troylee:er 上, 而不是 function 上 11/04 01:57
32F:→ troylee:且应详述 set timer 与 count down 这两个的关系 11/04 01:58
33F:→ mayasky:NO~是function上 11/04 02:00
34F:→ mayasky:炸弹的定时和开始倒数.ㄜ.这需要说吗?好吧.. 11/04 02:01
35F:→ mayasky:当我觉得大家都看过电视中的定时炸弹..我的错 11/04 02:01
36F:→ mayasky:放在变数上基本上是叫compiler要把这值写进对应address 11/04 02:02
37F:推 troylee:不过我还真的没看过 volatile 放在 c 的 function 上 @@ 11/04 02:02
38F:→ mayasky:不然compiler有可能只放在register中.这样对应的device是 11/04 02:03
39F:→ troylee:可能我真的看得不够多 抱歉 11/04 02:03
40F:→ mayasky:不会收到你写进去的讯号的..还是留在reg中 11/04 02:03
41F:→ mayasky:这种关键字本来就不常见..与硬体直接相关的code比较常见 11/04 02:05
42F:推 troylee:我只看过他用在 pointer 上. 11/04 02:07
43F:→ mayasky:asm volatile(..)应该常见点.这也是叫compiler不要最佳化 11/04 02:08
44F:→ mayasky:另外不是每个compiler都可以放在function前的样子 11/04 02:12
45F:→ mayasky:似乎是gcc另外延伸的..发问者应该是用gcc 11/04 02:13







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP