Re: [问题] volatile的正确用法

楼主: CindyLinz (Cindy Wang)   2014-09-14 14:43:00
※ 引述《windows2k (程式宅 <囧>)》之铭言:
: 不过中间有句话不太明了
: The C standard states that accesses to volatile objects are part of the
: unalterable observable behaviour — but it says nothing about accesses via
: lvalue expressions with volatile types. Consequently a sufficiently
: intelligent compiler can still optimize the buffer-zeroing away in this case
: — it just has to prove that the object being accessed was not originally
: defined as being volatile.
我讲一下我对这段话套用在这个 memset 例子的字面理解..
这个 memset 里面把指标宣告为指向 volatile 的指标,
用这个指标来存取东西的时候是这一段文字里面说的
“via lvalue expression with volatile types”
强调它是 volatile types 是因为我们是从这个指标来判断的,
而不是这一块被指的内存本身来看的.
这个 volatile 指标可能指向 volatile 内存, 也可能指向 non-volatile 内存,
这段话最前面说的
“access to volatile objects”
指的是一块内存本身被标为 volatile.
所以, 他说这个 memset 有效, 是因为 compiler 还不够聪明,
还没办法直接看出背后指到的内存是什么, 所以就先用指标的型态判断了,
但万一有一天 compiler 觉醒了, 发现你只是用指标在骗他,
他看穿你的把戏以后可能就会怒把它 optimize 掉.. XD
作者: purincess (purincess)   2014-09-14 23:00:00
拜大神(_m_)

Links booklink

Contact Us: admin [ a t ] ucptt.com