c – 与memset不同,可以放置新的生存优化吗?

前端之家收集整理的这篇文章主要介绍了c – 与memset不同,可以放置新的生存优化吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我真的很感兴趣它是否能够在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的指针.

猜你在找的C&C++相关文章