结构体对齐,#pragma pack
生活随笔
收集整理的這篇文章主要介紹了
结构体对齐,#pragma pack
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、結(jié)構(gòu)體對齊
首先通過一個例子說明結(jié)構(gòu)體對齊,可以看到,下面這個結(jié)構(gòu)體占32字節(jié)(32位)
typedef struct {double d;short s;int i;char c;short ss;char cc;int ii; } A;這個是8字節(jié)默認(rèn)對齊。
二、#pragma pack
可以使用 #pragma pack(push, 4) 將對齊數(shù)改成4,那么結(jié)構(gòu)體大小就會變成28字節(jié)。
#pragma pack(push, 4) typedef struct {double d;short s;int i;char c;short ss;char cc;int ii; } A; #pragma pack(pop)對齊從8改成了4,雖然成員沒變,但是大小變成了28. #pragma pack(push, 4) 和 #pragma pack(pop) 是設(shè)置和恢復(fù)對齊。#pragma pack(show) 可以在警告輸出欄打印當(dāng)前對齊數(shù)。
最后請讀者算一下對齊為16會怎樣?
#include <stdio.h>#pragma pack(push, 16) typedef struct {double d;short s;int i;char c;short ss;char cc;int ii; } A; #pragma pack(pop)int main() {printf("%d\n", sizeof(A));return 0; }分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
分割線
答案就是32
總結(jié)
以上是生活随笔為你收集整理的结构体对齐,#pragma pack的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (57)模拟线程切换
- 下一篇: (58)模拟线程切换——添加挂起、恢复线