与memset不同,可以放置新的优化吗?
所以我真的很想知道它是否能够在GCC和叮当声中采用激进的优化策略。
考虑下面的例子:
void* clean(void* pointer, std::size_t size) noexcept
{
return new(pointer) char[size]{};
}
void doStuff()
{
//...
clean(pointer, size);
//...
}
我可以通过清理敏感数据的任务来信任它吗?
我不认为优化可以在这里发挥任何诡计。 在这种情况下,标准强制值初始化: new(pointer) char[size]{}
,所以在这个调用之后, pointer
内存将被填充0。
可能是编译器可以优化它,如果你从来不访问新的指针或在accessin之前覆盖它(基于可观察性)。 如果你想避免这种轻微的可能性,你需要将你的指针定义为volatile
的指针。
我不确定这是回答你的问题还是只是一个附注,但你可以使用optimize()
编译器指令禁用对特定函数的optimize()
void* __attribute__((optimize("O0"))) clean(void* pointer, std::size_t size) {
// unmodifiable compiler code
}
这将确保您的clean()函数不会被优化
链接地址: http://www.djcxy.com/p/90569.html