C++对齐结构
C++ alignment structures
它在 #defines 和其他宏上的开放季节,我正在寻找一种可移植的方式来对齐结构 32 位和 64 位代码。以前,代码具有 AMD64 #define,如果不是这种情况,则会添加填充。
这是一种便携式的方法来做同样的事情,减去 #if!定义(...)... #endif
constexpr size_t defaultAlignmentBits = 4u;
constexpr size_t defaultAlignmentBytes = 16u;
template<size_t padLen>
struct PadIfNonZero {
uint8_t pad[padLen];
};
template<>
struct PadIfNonZero<0> {
};
template<typename T>
using PadToAlignment = PadIfNonZero<(sizeof(T) % defaultAlignmentBytes == 0 ? 0 : defaultAlignmentBytes - sizeof(T) % defaultAlignmentBytes)>;
如何改善这一点?
如果您希望类和结构在内存中具有一定的对齐方式,则应查看alignas运算符。它的工作原理是这样的:
Class Foo
alignas(64)
{
Foo();
~Foo();
};
在这里,Foo类与64字节对齐。但请注意,alignas 仅在 c++11 或更高版本中可用。希望这有帮助!
相关文章:
- OPENCL结构对齐错误
- 数据结构对齐:为什么Char和STD :: String的数组不同
- interpret_cast和结构对齐
- 结构对齐填充、最大填充大小和结构成员顺序
- 与此类结构对齐是否以C 标准为标准
- 64位Windows API结构对齐导致命名管道上出现“拒绝访问”错误
- 如何检测/查找 64 位结构对齐问题
- 检索数据结构对齐信息
- C# 中的结构对齐
- 视觉C++中的结构对齐
- 为什么iOS中的结构对齐方式不同
- 内存对齐-结构的总大小是结构对齐的倍数,而不是处理大小
- 内存对齐到结构-对齐大小等于最大成员大小
- 结构对齐 C/C++
- C与C++结构对齐
- 警告 C4121 行为和结构对齐 (Visual Studio 2010)
- C/C++ 中的对象/结构对齐
- #pragma pack,模板类型和结构对齐
- Fscanf和结构对齐
- c++中的结构对齐和填充