所以我真的很感兴趣它是否能够在GCC和clang采用的激进优化策略中存活下来.
考虑以下示例:
void* clean(void* pointer,std::size_t size) noexcept { return new(pointer) char[size]{}; } void doStuff() { //... clean(pointer,size); //... }
我可以相信清理敏感数据的任务吗?
解决方法
我不认为优化可以在这里发挥任何技巧.在这种情况下标准的命令值初始化:new(指针)char [size] {},所以在这个调用指针指向的内存之后将填充0.
如果您从未访问新指针或在访问之前覆盖它(基于可观察性),编译器可以优化它.如果你想避免这种可能性,你需要将指针定义为指向volatile的指针.