我非常想知道它是否能够经受住GCC和clang采用的激进优化策略的考验。
考虑以下示例:
void* clean(void* pointer, std::size_t size) noexcept
{
return new(pointer) char[size]{};
}
void doStuff()
{
//...
clean(pointer, size);
//...
}
我能相信它来清除敏感数据吗?
我非常想知道它是否能够经受住GCC和clang采用的激进优化策略的考验。
考虑以下示例:
void* clean(void* pointer, std::size_t size) noexcept
{
return new(pointer) char[size]{};
}
void doStuff()
{
//...
clean(pointer, size);
//...
}
我能相信它来清除敏感数据吗?
我不确定这是否是对你问题的回答,还是只是一些附加说明,但是你可以使用optimize()
编译指令来禁用该特定函数的优化。
void* __attribute__((optimize("O0"))) clean(void* pointer, std::size_t size) {
// unmodifiable compiler code
}
new(pointer) char[size]{}
,因此调用后,由pointer
指向的内存将被填充为0。volatile
。std::free
。 - bit2shift
new(pointer) char[size]
会写入size + y
个字节,其中y
是未指定的值。 - M.M