0

C++ 标准中没有指定填充。它取决于编译器和 CPU。手动避免填充可能会导致性能问题或更糟。因此,控制填充中的内容似乎是一种更可行的方法,可以最大限度地减少填充引起的不良副作用,例如安全性。

我想要做的是在对齐的 POD 中填充零。例如模板化函数template<typename T> T zero_padding(T const & pod);

但也有问题。

  1. 如果我们直接struct复制,我们不知道填充会做什么,因为 C 标准不保证任何事情。
  2. 我们可以memset构建结构,然后按成员进行复制。但它似乎是特定于结构的,对于模板来说并不容易。

所以我似乎找不到一个简单的方法来做到这一点。

4

2 回答 2

4

这似乎是他们争论的核心

“由于未初始化,填充字节可能包含随机数据(敏感数据)。”

我建议在完成处理后清除敏感数据比让所有其他代码担心包含敏感数据的内存要安全得多。您希望敏感数据具有受控的生命周期,将其放置在周围并且不受控制是很弱的。

于 2013-08-28T03:09:32.537 回答
0

用于memcpy复制结构的字节。这将复制填充字节。合法性memcpy是 POD 概念的全部主旨。

为确保复制操作产生零填充,请确保每个原始对象都使用零填充初始化。在执行值初始化时,C++ 确实将 POD 的填充位初始化为零,即如果初始化程序是= T()或在 C++11 中,则只需{}. 或者,如果您愿意,可以使用memset.

于 2013-08-28T03:49:25.277 回答