2
许多加密库包括类似于下面的代码片段:为什么大多数c编译器不会优化此归零代码?
/* Implementation that should never be optimized out by the compiler */
static void optimize_proof_zeroize(void *v, size_t n)
{
volatile unsigned char *p = v;
while(n--) *p++ = 0;
}
但我幼稚的做法不下去的优化编译器:
/* Naive zeroization implementation */
static void naive_zeroize(unsigned char *c, size_t n)
{
int i;
for(i = 0; i < n; i++)
c[i] = 0;
}
该代码是用来释放的前补零敏感数据记忆。由于缓冲区不再被使用,优化编译器假定它们可以安全地从编译后的代码中移除zeriozation。
什么阻止第一个实现被优化?
你可能想了解更多关于【了'volatile'预选赛(http://en.cppreference.com/w/c/language/易失性)。 –
我看不出任何原因,任何片段都会被优化掉。也许你可以[编辑]你的问题,包括一个你为什么认为第二个片段必须被优化掉的描述。 –