【发布时间】:2022-01-30 20:04:54
【问题描述】:
我正在尝试安全地在类析构函数中将std::array 归零。 安全地,我的意思是我想确保编译器永远不会优化这个归零。这是我带来的:
template<size_t SZ>
struct Buf {
~Buf() {
auto ptr = static_cast<volatile uint8_t*>(buf_.data());
std::fill(ptr, ptr + buf_.size(), 0);
}
std::array<uint8_t, SZ> buf_{};
};
此代码是否按预期工作?无论如何,volatile 关键字会阻止编译器优化吗?
【问题讨论】:
-
你为什么要那个
-
要安全地擦除内存,您需要使用一些专门用于该目的的平台/编译器特定功能。标准 C++ 无法保证。您对哪个平台/编译器感兴趣?
-
这能回答你的问题吗? How-to write a password-safe class?
-
我认为 C++ 标准不保证这一点。实际上,如果您确实确保将一些 RAM 清零,操作系统仍有可能在交换存储中留下一个副本。
-
易失性转换确保机器将实际执行写操作并将内存归零。它是否会提供任何安全性是任何人的猜测,因为您的威胁没有明确说明,但我的猜测在“否”方面是坚定的。
标签: c++