91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言結構體對齊

發布時間:2020-08-09 10:20:10 來源:網絡 閱讀:317 作者:呱呱呱wsy 欄目:編程語言
#include <stdio.h>
//gcc ubuntu 32位機
#pragma pack(8)
typedef struct m
{
    char a ;
    long b ;
} M;

typedef struct n
{
    char a ;
    char b ;
    long c ;
} N;

typedef struct x
{
    char      a ;
    struct m  b ;
    long long c ;
} X;

typedef struct y
{
    char      a ;
    struct n  b ;
    long long c ;
} Y;
#pragma pack()
#define  ADDR(addr)  ((unsigned int)(addr))

void main(void)
{
    printf("sizeof(char):%d  sizeof(short):%d  sizeof(int):%d sizeof(long):%d sizeof(long long):%d\n",\
            sizeof(char),sizeof(short),sizeof(int),sizeof(long),sizeof(long long));

    printf("sizeof(M):%d  sizeof(N):%d sizeof(X):%d  sizeof(Y):%d\n",sizeof(M),sizeof(N),sizeof(X),sizeof(Y)) ;
    
    M m ;
    N n ;
    X x ;
    Y y ;
    
    printf("m.a:%d m.b:%d \n",ADDR(&m.a)-ADDR(&m),ADDR(&m.b)-ADDR(&m));
    printf("n.a:%d n.b:%d  n.c:%d \n",ADDR(&n.a)-ADDR(&n),ADDR(&n.b)-ADDR(&n),ADDR(&n.c)-ADDR(&n));   
    printf("x.a:%d x.b.a:%d  x.b.b:%d x.c:%d\n",ADDR(&x.a)-ADDR(&x),ADDR(&x.b.a)-ADDR(&x),ADDR(&x.b.b)-ADDR(&x),ADDR(&x.c)-ADDR(&x));
    printf("y.a:%d y.b.a:%d  y.b.b:%d y.b.c:%d y.c:%d\n",ADDR(&y.a)-ADDR(&y),ADDR(&y.b.a)-ADDR(&y),ADDR(&y.b.b)-ADDR(&y),ADDR(&y.b.c)-ADDR(&y),ADDR(&y.c)-ADDR(&y));    
     
    
    return ;
}

/*
程序運行結果:
sizeof(char):1  sizeof(short):2  sizeof(int):4 sizeof(long):4 
sizeof(long long):8

sizeof(M):8  sizeof(N):8 sizeof(X):20  sizeof(Y):20

m.a:0 m.b:4 

n.a:0 n.b:1  n.c:4 

x.a:0 x.b.a:4  x.b.b:8 x.c:12//這里的x.c沒有對其到可被8整除的地址上
                             //系統是按4字節對其的嗎?32位的系統8字節對齊沒有意義?
                             //32位的系統,8字節的數據采用8字節的對齊方式,內存的讀取
                             //也要讀取多次,對其到8字節浪費空間,且不能加快讀取速度
                             //因為32為的系統,數據總線是32位,一次最多也就只能取4個
                             //字節的數據,8字節的數據,對齊到4字節和對齊到8字節是一樣的
                             //內存的硬件電路決定了,最大也就4字節對齊,大于4字節的對齊是沒有意義的

y.a:0 y.b.a:4  y.b.b:5 y.b.c:8 y.c:12//這里的y.c沒有對其到可被8整除的地址上

*/

/*
把#pragma pack(8)  改為 #pragma pack(1)
程序運行結果:
sizeof(char):1  sizeof(short):2  sizeof(int):4 sizeof(long):4 
sizeof(long long):8

sizeof(M):5  sizeof(N):6 sizeof(X):14  sizeof(Y):15

m.a:0 m.b:1 
n.a:0 n.b:1  n.c:2 
x.a:0 x.b.a:1  x.b.b:2 x.c:6
y.a:0 y.b.a:1  y.b.b:2 y.b.c:3 y.c:7

*/

/*
把#pragma pack(8)  改為 #pragma pack(4)
程序運行結果:
sizeof(char):1  sizeof(short):2  sizeof(int):4 sizeof(long):4 
sizeof(long long):8
sizeof(M):8  sizeof(N):8 sizeof(X):20  sizeof(Y):20
m.a:0 m.b:4 
n.a:0 n.b:1  n.c:4 
x.a:0 x.b.a:4  x.b.b:8 x.c:12
y.a:0 y.b.a:4  y.b.b:5 y.b.c:8 y.c:12
*/


向AI問一下細節
推薦閱讀:
  1. 初學C語言
  2. C語言介紹

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣城市| 若尔盖县| 昆山市| 玉屏| 崇仁县| 恩施市| 兖州市| 青铜峡市| 安西县| 乐昌市| 胶州市| 句容市| 辛集市| 察雅县| 安溪县| 米泉市| 肥城市| 定边县| 东阿县| 乌鲁木齐县| 温泉县| 封丘县| 景泰县| 汤原县| 江油市| 永胜县| 阿瓦提县| 义乌市| 宜州市| 称多县| 河东区| 和林格尔县| 沂水县| 蓝山县| 闽清县| 屯门区| 南岸区| 梁山县| 阿图什市| 威远县| 吉林省|