【发布时间】:2016-06-25 16:02:25
【问题描述】:
所以我真的很想知道它能否在 GCC 和 clang 采用的激进优化策略中幸存下来。
考虑以下示例:
void* clean(void* pointer, std::size_t size) noexcept
{
return new(pointer) char[size]{};
}
void doStuff()
{
//...
clean(pointer, size);
//...
}
我可以信任它清理敏感数据的任务吗?
【问题讨论】:
-
你不能信任数组放置 new at all!
-
@KerrekSB 该问题中指定的示例不是基本类型。如果我没记错的话,其中提到的“y”是给定类型所需的对齐方式。
-
"用于此目的的操作系统功能可能会受到与 memset 相同的处理" 不,不能。这正是具有这种功能的意义所在。编译器无法删除它,因为它不能证明没有副作用。
-
@bit2shift C++ 标准说
new(pointer) char[size]写入size + y字节,其中y是一个未指定的值 -
@bit2shift 是的,确实
标签: c++ memory optimization