【发布时间】:2013-08-30 23:11:39
【问题描述】:
C++ 标准中没有指定填充。它取决于编译器和 CPU。 手动避免填充可能会导致性能问题或更糟。 因此,控制填充中的内容似乎是一种更可行的方法,可以最大限度地减少填充引起的不良副作用,例如安全性。
我想要做的是在对齐的 POD 中填充零。例如一个模板化的函数template<typename T> T zero_padding(T const & pod);
但是有问题。
- 如果我们直接进行
struct复制,我们不知道会在填充上做什么,因为 C 标准不保证任何事情。 - 我们可以
memset结构,然后按成员进行复制。但它似乎是特定于结构的,对于模板来说并不容易。
所以我似乎找不到一个简单的方法来做到这一点。
【问题讨论】:
-
不应该阅读填充中的内容,那么它为什么重要呢?您的编译器可能会让您完全禁用填充。
-
@NeilKirk 正如我提到的,出于安全原因。您可以通过这些填充泄漏信息。
-
你能举一个简单的例子来说明这是怎么发生的吗?我只是好奇。
-
@NeilKirk securecoding.cert.org/confluence/display/seccode/… 这有一些信息。但是解决方案似乎是手动执行或仅使用编译器设置来避免填充。
-
您必须使用特定的编译器来执行您想要的行为。