[问题] volatile的正确用法

楼主: windows2k (程式宅 <囧>)   2014-09-12 22:21:31
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++/GCC/CLANG
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
None
问题(Question):
volatile大概是C/C++最难了解的关键字之一
最近在看完这篇[How to zero a buffer](http://bit.ly/1wmpbys)产生的问题
在开启最佳化之后,对照Assembly Code,所有的编译器会舍弃掉stack上的memset。
不过如果照他的方式刻一个,会发现所有Compiler都会做清空的动作
static void
secure_memzero(void * p, size_t len)
{
volatile uint8_t * _p = p;
while (len
作者: Feis (永远睡不着 @@)   2014-09-13 03:05:00
看起来是有机会被最佳化掉我想这算是要求编译器给个保证..但是中间那段话我也有点不知其所以感觉 C11 的那个实作除了比较慢没有太大问题
楼主: windows2k (程式宅 <囧>)   2014-09-13 07:29:00
我的问题是如果可能被最佳化掉, 那为什么大家都这么做还是大家约定俗成完全无视?
作者: lsc36 (lsc36)   2014-09-14 01:19:00
话说这篇有part2 结论有点恐怖...
作者: carylorrk (carylorrk)   2014-09-14 04:29:00
总觉得太钻牛角尖了 真的是非常非常罕见的例子吧XD?
楼主: windows2k (程式宅 <囧>)   2014-09-14 09:00:00
没办法, 自从heartbleed之后,大家对资安特别敏感哪边该清没清总是要特别关心,不然不重要谁理他

Links booklink

Contact Us: admin [ a t ] ucptt.com