使用#pragma pack设置内存对齐

1、概述

#pragma pack(n)

作用是用于设置内存对齐方式,n可以为1,2,4等,如下面代码所示:

2、代码示例

#include "stdafx.h"
#include <Windows.h>
#include <iostream>


#pragma pack(1)
struct  
{
char a;
WORD b;
DWORD c;
char d;
WORD e;
} st_demo1;
#pragma pack()


struct  
{
char a;
WORD b;
DWORD c;
char d;
WORD e;
} st_demo2;


#pragma pack(2)
struct  
{
char a;
WORD b;
DWORD c;
char d;
WORD e;
} st_demo3;
#pragma pack()


#pragma pack(4)
struct  
{
char a;
WORD b;
DWORD c;
char d;
WORD e;
} st_demo4;
#pragma pack()


int _tmain(int argc, _TCHAR* argv[])
{
int len1 = sizeof(st_demo1);
std::cout << "sizeof(st_demo1) is:" << len1 << "\n";


int len2 = sizeof(st_demo2);
std::cout << "sizeof(st_demo2) is:" << len2 << "\n";


int len3 = sizeof(st_demo3);
std::cout << "sizeof(st_demo3) is:" << len3 << "\n";

int len4 = sizeof(st_demo4);
std::cout << "sizeof(st_demo4) is:" << len4 << "\n";


system("pause");
return 0;
}


3、结果示例

sizeof(st_demo1) is:10
sizeof(st_demo2) is:12
sizeof(st_demo3) is:12
sizeof(st_demo4) is:12
请按任意键继续. . .

4、结论

(1)在编码集在unicode的情况下,设置n为2、4或默认情况下,所得长度一致;

(2)在n为1的情况下,以一个字节为单位存放数据;虽然节省空间,但是操作系统任然要进行转化,会有一定的效率损失;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值