复制C++POD时控件对填充的影响
Control effects on padding when copying a C++ POD
C++标准中未指定填充。它依赖于编译器和CPU。手动避免填充可能会导致性能问题或更糟。因此,控制填充中的内容似乎是一种更可行的方法,可以最大限度地减少填充引起的不良副作用,例如安全性。
我想做的是在一个对齐的POD中填充0。例如模板化函数template<typename T> T zero_padding(T const & pod);
但也存在一些问题。
- 如果我们直接复制
struct
,我们不知道在填充上会做什么,因为C标准不能保证任何东西 - 我们可以
memset
结构,然后进行成员复制。但它似乎是特定于结构的,对于模板来说不容易做到
所以我似乎找不到一个简单的方法来做这件事。
这似乎是他们争论的核心
由于未初始化,填充字节可能有随机数据(敏感数据)
我建议,在处理完敏感数据后,清除敏感数据要比所有其他代码担心内存中包含敏感数据安全得多。你希望敏感数据有一个可控的生命周期,让它闲置而不被控制是很脆弱的。
使用memcpy
复制结构的字节。这将复制填充字节。memcpy
的合法性是POD概念的整体主旨。
要确保复制操作生成零填充,请确保每个原始对象都使用零填充进行初始化。当执行值初始化时,C++确实将POD的填充位初始化为零,即,如果初始化器是= T()
或在C++11中,则简单地为{}
。如果您愿意,也可以使用memset
。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在c++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 为什么擦除方法会影响结束方法
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 内联如何影响模块接口中的成员函数
- 如何正确填充在堆上分配的二维数组?
- 将数字转换为填充字符串
- 有没有办法在一行中填充矢量图
- 用C++中的数字和条件填充向量
- 用真值填充矢量
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 使用结构成员指针在C++中填充结构
- 在容量内调整矢量大小时的性能影响
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 结构/类是否以某种方式影响内存填充
- 复制C++POD时控件对填充的影响