该__attribute__
命令是 gcc 的编译器特定命令。它在该文件的第 52 行与((align))
命令一起使用,其中:
为指定类型的变量指定最小对齐方式(以字节为单位)
Visual Studio 实际上有一个类似的对齐命令:align
. 但是有两个问题:
__declspec(align(#))
不支持 defaulted:__attribute__ ((aligned))
行为,该行为将:
将类型与您正在编译的目标机器的最大有用对齐方式对齐
__declspec(align(#))
是前缀。__attribute__((aligned(#)))
是一个后缀。这意味着您的实际代码需要在位置上有所不同:
struct S { short f[3]; } __attribute__ ((aligned)); // gcc alignment definition
__declspec(align(16)) strict S { short f[3]; }; // MSVC alignment
这里的重点是编译器可能会更好地#ifdef
使用任何使用__attribute__ ((aligned))
和烹饪自己的行__declspec(align(#))
。
有关更多信息,请参阅:GCC 与 MSVC 类打包和对齐
在对 lemur_platform.h 进行了更多研究之后,看起来代码已经为您完成了上述所有工作!你会注意到它#define LEMUR_POSTALIGN __attribute__ ((aligned))
被包裹在一个#ifndef WIN32
. 所以你需要做的是WIN32
在你的 Visual Studio 项目中定义!