[問題] 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