qdi*_*dii 3 c++ optimization volatile
考虑这个功能:
void foo(int * p)
{
// something
}
Run Code Online (Sandbox Code Playgroud)
编译器是否可以假设没有其他线程会修改p指向的值?或者它是否必须表现得好像可以随时修改此值?
void bar(volatile int * p)
{
}
Run Code Online (Sandbox Code Playgroud)
如果没有,volatile关键字是否有帮助?GOTW#69指出,volatile编译器通常会忽略关键字.
编辑:显然对"编译器假定"这一短语存在一些误解.让我澄清一下:
*p在第一次读取时将值放入寄存器,然后使用它直到p超出范围.此时,它应该写入该*p内存地址的值.*p读取时,编译器都应该从内存中获取它的值,因为有一些其他线程可能会修改它.每次*p更改时,编译器都应将其写入内存,以便其他线程可以读取它| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |