__declspec(align(#))如何工作?

NPS

是的,我阅读以下内容:http : //msdn.microsoft.com/zh-cn/library/83ythb65.aspx但是我不清楚。首先,__declspec(align(#))使用它声明的每个对象(在结构中)都从对齐的偏移量开始。那部分很清楚。该对象也由对象所在的结构化“继承”。但是它不会改变对象的大小,对吗?确切地说,为什么sizeof()在此代码中执行以下操作:

__declspec(align(32)) struct aType {int a; int b;};
sizeof(aType);

回报32

马特·彼得森(Mats Petersson)

对象的大小用于计算数组中的偏移量以及使用指针时的偏移量,因此sizeof(x)必须始终为对齐值的倍数。在这种情况下,为1 x32。但是,如果您有__declspec(align(32)) struct aType {int a[12]; };,那么大小将为2 x 32 = 64,因为sizeof(a)为12 x 4 =48。如果我们将其更改为与4、8或16对齐,它将将是48。

实际的工作方式是,编译器在结构的命名成员之后添加一个未修饰的填充成员,以将结构填充到其对齐大小。

如果这种方式不起作用,则类似:

 aType *aPtr = new aType[15]; 

 aPtr[12].a = 42; 

不正确的工作,因为编译器将乘12sizeof(aPtr)添加到aPtr内部。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

__declspec(align(#))如何工作?

来自分类Dev

__declspec(dllimport)实际如何工作?

来自分类Dev

在哪种情况下__declspec(align(#))不起作用?

来自分类Dev

带有__declspec(align('16'))的形式参数将不会对齐

来自分类Dev

DirectX :: XMMATRIX错误C2719:__declspec(align('16'))无法对齐

来自分类Dev

XMMATRIX和带有__declspec(align('16'))的形式参数将不会对齐

来自分类Dev

有没有办法使用 __declspec(align) 来声明不同类型的对象

来自分类Dev

声明为__declspec(naked)的函数如何存储局部变量?

来自分类Dev

如何摆脱Xcode中的“未知类型名称'__declspec'”错误

来自分类Dev

如何使用包装类中定义的__declspec(dllexport)结构导出?

来自分类Dev

如何使flexbox align-items flex-end在WebKit / Blink中工作?

来自分类Dev

struct __declspec(align(16))sse_t和struct alignas(16)sse_t有什么区别?

来自分类Dev

Gas .align指令无法正常工作

来自分类Dev

align-items属性无法正常工作

来自分类Dev

工作目录如何工作?

来自分类Dev

Rust,如何使用DLL中的全局变量?C ++等效要求__declspec(dllimport)

来自分类Dev

〜/如何工作?

来自分类Dev

GetProcAddress 与 __declspec( dllimport)

来自分类Dev

align-items:center; 不能按预期工作

来自分类Dev

align-items-* 类没有按预期工作

来自分类Dev

OCMock如何工作?

来自分类Dev

这个fork()如何工作

来自分类Dev

如何使kGADAdSizeSmartBannerPortrait工作

来自分类Dev

'cmp'命令如何工作?

来自分类Dev

haskell代码如何工作?

来自分类Dev

“ extern C ++”如何工作?

来自分类Dev

TryParse方法如何工作?

来自分类Dev

Rails路由如何工作?

来自分类Dev

WebHook如何工作?

Related 相关文章

热门标签

归档