• 字节对齐


    字节对齐:一个变量占用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;
    }
  • 相关阅读:
    ubuntu server安装桌面
    apache使用gzip压缩
    NoSQL开篇——为什么要使用NoSQL
    HTMl5的sessionStorage和localStorage
    apache服务器开启虚拟主机后localhost和ip无法访问的问题
    hg(Mercurial)使用参考
    meta的httpequiv属性详解
    分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
    框架入手心得
    最简单的弹出层代码
  • 原文地址:https://www.cnblogs.com/chen-cai/p/13349772.html
Copyright © 2020-2023  润新知