c++ 中__declspec 的用法 语法说明: __declspec ( ex tended-decl-modifier-seq ) 扩展修饰符: 1:align(#) 用__declspec(align(#))精确控制用户自定数据的对齐方式 ,#是对齐值
g __declspec(align(32)) struct Str1{ int a, b, c, d, e; }; 【转】它与#pragma pack()是一对兄弟,前者规定了对齐的最小值,后者规定了对齐的最大值
同时出现时,前者优先级高
__declspec(align())的一个特点是, 它仅仅规定了数据对齐的位置,而没有规定数据实际占用的内存长度,当指定的数据被放置在确定的位置之后,其后的数据填充仍然是按照#pragma pack 规定的方式填充的,这时候类/结构的实际大小和内存格局的规则是这样的:在__declspec(align())之前,数据按照#pragma pack 规定的方式填充,如前所述
当遇到__declspec(align())的时候,首先寻找距离当前偏移向后最近的对齐点(满足对齐长度为 max(数据自身长度,指定值)),然后把被指定的数据类型从这个点开始填充,其后的数据类型从它的后面开始,仍然按照#pragma pack 填充,直到遇到下一个__declspec(align())
当所有数据填充完毕,把结构的整体对齐数值和__declspec(align())规定的值做比较,取其中较大的作为整个结构的对齐长度
特别的,当__declspec(align())指定的数值比对应类型长度小的时候,这个指定不起作用
2: allocate("segname") 用__declspec(allocate("segname")) 声 明一 个 已 经 分 配 了 数据段 的一 个数据项