C++ C+中的内存对齐语法+;
什么决定了C/C++内存对齐语法 我正在开发一些需要内存/数据对齐的嵌入式应用程序。 根据我以前的经验,对于使用GCC和MSVC的C代码,内存对齐语法似乎主要由编译器决定:C++ C+中的内存对齐语法+;,c++,memory-alignment,C++,Memory Alignment,什么决定了C/C++内存对齐语法 我正在开发一些需要内存/数据对齐的嵌入式应用程序。 根据我以前的经验,对于使用GCC和MSVC的C代码,内存对齐语法似乎主要由编译器决定: GCC __attribute__ ((aligned (128))) MSVC __declspec(align(128)) 我对以下问题感到好奇: 对齐语法是否还取决于其他因素,例如 操作系统的目标硬件和/或数据模型?还是完全依赖 在编译器上 对于C++11,新语法alignas(128)是C++11的一部分吗
GCC __attribute__ ((aligned (128)))
MSVC __declspec(align(128))
我对以下问题感到好奇:
alignas(128)
是C++11的一部分吗
标准,因此独立于编译器/平台std::align
时,它会执行完整的数据处理吗
复制从而妨碍性能alignas
说明符(即,
弱于其自然对齐或弱于另一个上的alignas
声明相同的对象或类型),程序格式不正确
由于类型在不同平台上具有不同的对齐方式,这可能适用于一个目标平台,而不适用于另一个目标平台:
struct alignas(2) foo { int bar; };
大小\u t
空间计数器。
如果缓冲区太小,则函数不执行任何操作并返回nullptr
谢谢你的回答。我仍然对(2)中的“格式错误”程序感到好奇,它是意味着它将被忽略,还是意味着未定义的行为?@knightyangpku如果我读得正确,它应该会导致错误,但是
g++
只是忽略它,并在需要时增加对齐clang++
将其作为硬错误拒绝:“错误:请求的对齐方式小于for类型的最小对齐方式”