1)以下是自然对齐指针的声明:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>(Same… with more texts!)</p>
<div class="cc-selector">
<label>
<input type="radio" name="radAnswer" value="vhappy" />
<label for="vhappy">Very happy</label>
</label>
<label>
<input type="radio" name="radAnswer" value="happy" />
<label for="happy">Happy</label>
</label>
<label>
<input type="radio" name="radAnswer" value="sad" />
<label for="sad">Sad</label>
</label>
<label>
<input type="radio" name="radAnswer" value="vsad" />
<label for="vsad">Very sad</label>
</label>
</div>
<p>(… and again!)</p>
<div class="cc-selector">
<label>
<input type="radio" name="radAnswer" value="vhappy" />
<label for="vhappy">Very happy</label>
</label>
<label>
<input type="radio" name="radAnswer" value="happy" />
<label for="happy">Happy</label>
</label>
<label>
<input type="radio" name="radAnswer" value="sad" />
<label for="sad">Sad</label>
</label>
<label>
<input type="radio" name="radAnswer" value="vsad" />
<label for="vsad">Very sad</label>
</label>
</div>
相当于
alignas(sizeof(void *)) volatile void * p;
在C ++ 11中?
2)更准确地说,假设这种类型的指针与C ++ 11中的std :: atomic一样工作是否正确?
答案 0 :(得分:1)
不,volatile不保证该位置将以原子方式写入或读取,只是编译器无法优化多次读写。
在某些体系结构中,如果正确对齐,处理器将以原子方式读取或写入,但这不是通用的,甚至不能通过一系列处理器来保证。在可能的情况下,原子的内部实现将利用架构特性和原子指令修饰符,那么为什么 不 使用原子,如果你的意思是原子?