日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)...

發布時間:2023/12/10 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在windows下設置字節對齊大小的方式,目前我了解有三種:


1. 在編譯程序時候的編譯選項 ?/Zp[n],如 cl /Zp4 表示對齊大小是4字節;

2. 預處理命令 ? #pragma pack( [ show ] | [ push | pop ] [, identifier ] , n? );

3. 微軟特定命令 ?__declspec(align(#))。


下面我將分別介紹這三種,并分析不同方式的優缺點,先明確下字節對齊大小都是2的指數倍如1,2,4,8,16,32等。

方法一的用法最為簡單,只需要在編譯選項設置就行,該方式將作用于整個模塊,因此是全局性的,不夠靈活。

方法二的用法復雜點,但該方法可以在一個模塊中不斷的設置字節對齊大小,靈活性很強,針對不同的結構體采用不同的對齊大小,很適合這種方法,但用法較為復雜。

方法三的方法主要是作用于整個結構體上,是加強了字節對齊的限制,如將整個結構體對齊為64字節,不管里面元素總的大小,則結構體大小為大于總大小的最小的64倍數。


結構體大小的確定以及每個元素位置的確定:

對齊大小為 align(方法一和方法二設置的值,在vs2013中默認為8字節)、結構體中元素字節最大為max、結構體對齊align_struct(由方法三進行設置)

? ? ? ?假設內存是一個一個籃子用于存放結構體的每個變量, 而籃子肯定有大小 ? = min(align, max)大小為對齊大小和元素字節最大的 較小者。

下面就是將元素放入籃子的問題,有個原則是:

"The alignment of a member will be on a boundary that is either a multiple ofn or a multiple of the size of the member, whichever is smaller."

每個元素放置的位置 要么是 對齊大小的整數倍,要么是 該元素大小的整數倍,比較這兩個值,哪個小就放在那。

若沒有方法三設置,則最后結構體的大小就為籃子 大小的倍數,若有方法三的設置最后在考慮結構體整體的字節對齊。下面舉個例子:

typedef struct A {char ca;int ib;short sc;int id;double de; }A;
若對齊大小align=4, 則 max = 8 = sizeof(double), 籃子大小為 min(4,8) = 4.

char ca 放在第一個籃子中, 偏移為0

int ib 要放在的位置必須為4的倍數,所以放在第二個籃子中,偏移為4

short sc 要放在的位置為2的倍數, 所以放在第三個籃子中,偏移為8

? ? ? ?int id要放在位置為4的倍數, 第三個籃子沒有這樣的位置,所以放在第四個籃子中,偏移為12

? ? ? double要放在位置為4的倍數,放在第五個籃子和第六個籃子中,偏移為16,

可以看出總共用了6個籃子,總大小sizeof(A) = 24.


若添加方法三在結構體上 如下

typedef struct __declspec( align( 32) ) A {char ca;int ib;short sc;int id;double de; }A;修飾結構體的對齊大小為32,則sizeof(A) = 32 ,但每個元素在該結構體中偏移和上面都一樣,只是在結構體的末尾添加字節用于對齊。


? ? ? 現在只是簡單介紹了三種方法和結構體大小的確定 ,將在后面具體介紹方法二和方法三的用法。


轉載于:https://www.cnblogs.com/liwugang/p/7594101.html

總結

以上是生活随笔為你收集整理的Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。