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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内存字节对齐问题

發布時間:2024/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存字节对齐问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天看到一個求結構體偏移量的題目,可以使用宏來求解,覺得很是新奇,繼續深入考慮到結構體字節對齊問題。參考網上的內容,對齊的規則有如下兩條:

  • 第一個數據成員從offset=0的地址開始放,以后的數據成員存放的起始位置要么為本數據大小的整數倍要么為其體內所含子成員大小的整數倍。
  • 結構體的sizeof得到的大小肯定為其內部最大成員的大小的整數倍;
  • 網上有說結構體內有子結構體時,子結構體的開始位置應該為其內部最大數據成員大小的整數倍,經實驗,不符合此條。
  • 同時可以使用#pragma pack(n),來改變對齊的大小,一般都設置為1,2,4。默認的值和機器字長有關。
  • 1 #include <string> 2 #include <iostream> 3 //#pragma pack(1) 4 #define FIND(type, member) (size_t)&(((type*)0)->member) 5 using namespace std; 6 struct aa{ 7 int a; 8 char b; 9 double c; 10 }; 11 12 struct Node{ 13 char a; 14 int ia; 15 double da; 16 char b; 17 char c; 18 aa sa; 19 }; 20 int main(int argc, char* argv[]){ 21 cout << FIND(struct Node, a) << endl; 22 cout << FIND(struct Node, ia)<< endl; 23 24 cout << FIND(struct Node, da)<< endl; 25 cout << FIND(struct Node, b)<< endl; 26 cout << FIND(struct Node, c)<< endl; 27 cout << "sa" << FIND(struct Node, sa)<< endl; 28 cout << "sizeof(double):" << sizeof(double) << endl; 29 cout << "sizeof(aa):" << sizeof(aa) << endl; 30 cout << "sizeof(Node):" << sizeof(Node) << endl; 31 32 cout << "---------------------------------------"; 33 Node *p = new Node; 34 cout << "&p:" << (int*)p << endl; 35 cout << "&p->a:" <<(int*)&(p->ia) << endl; 36 37 }

    ?

    ?

    轉載于:https://www.cnblogs.com/wyqx/p/3346364.html

    總結

    以上是生活随笔為你收集整理的内存字节对齐问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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