码迷,mamicode.com
首页 > 其他好文 > 详细

字节对齐

时间:2020-07-21 10:01:27      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:pac   执行   ios   pre   iostream   强制   自己   names   stream   

字节对齐:一个变量占用n个字节,则该变量的起始地址必须是n的整数倍,即存放起始地址%n=0;如果是结构体,那么结构体的起始地址是其最宽数据类型成员的整数倍;这个是cpu的要求,按照这样的存储方式,cpu查找起来会比较快,以空间来换取时间,提高程序的执行效率。

所以自己在写程序的时候,需要考虑字节对齐的问题,尽可能去考虑时间和空间的问题

当对空间要求较高的时候,可以通过#pragma pack(n)来改变结构体成员的对齐方式

  • #pragma pack(n)中n用来设定变量以n字节方式对齐,可以设定的值包括1、2、4、8
  • 若需取消强制对齐方式,则可用命令#pragma pack()
#include <iostream>

using namespace std;

#pragma pack(1)  // 以下空间的申请都以1个字节来进行对齐
struct Test
{
    char a;
    int  b;
};
#pragma pack()  // 取消强制对齐

int main()
{

    return 0;
}

真正字节对齐的结果是以 N = min(最大成员,对齐参数),如下:

#include <iostream>

using namespace std;

#pragma pack(1)  // 以下空间的申请都以1个字节来进行对齐
struct Test1
{
    char a;
    int  b;
};
#pragma pack()  // 取消强制对齐

#pragma pack(8)  // 以下空间的申请都以8个字节来进行对齐,但是结构体的最大成员是占4个字节,所以就以4个字节来对齐
struct Test2
{
    char a;
    int  b;
};
#pragma pack()  // 取消强制对齐

int main()
{

    return 0;
}

 

字节对齐

标签:pac   执行   ios   pre   iostream   强制   自己   names   stream   

原文地址:https://www.cnblogs.com/chen-cai/p/13349772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!