bit*_*ift 7 c++ memory optimization
所以我真的很感兴趣它是否能够在GCC和clang采用的激进优化策略中存活下来.
考虑以下示例:
void* clean(void* pointer, std::size_t size) noexcept
{
return new(pointer) char[size]{};
}
void doStuff()
{
//...
clean(pointer, size);
//...
}
Run Code Online (Sandbox Code Playgroud)
我可以相信清理敏感数据的任务吗?
我认为优化不会对你起任何作用。在这种情况下,标准要求初始化值:new(pointer) char[size]{}
,因此在此调用之后, by 指向的内存pointer
将被填充为 0。
如果您在访问之前从未访问新指针或覆盖它(基于可观察性),则编译器可能可以对其进行优化。如果您想避免这种轻微的可能性,您需要将指针定义为指向 的指针volatile
。