• 内存对齐: 结构体和位段大小的计算


    内存对齐出现的背景: 现代CPU会以双字节,四字节,八字节...偶数倍的字节大小存取内存块.如果一个数据没有对齐,则会导致CPU多次存取内存的现象,影响系统效率。

    内存对齐: 将数据以内存对齐规律存放,提高CPU的存取效率。

    结构体大小:
    1.第一个成员从偏移量为0的地址开始

    2.其他成员大小:

    其他成员变量要对齐到对齐数的整数倍的地址处。

    对齐数=min ( 该成员大小,默认对齐数 )。    VS中默认的值是8,(32位cpu)Linux中的默认值是4。

    3.结构体的总大小:

    是最大对齐数的整数倍 

    4.如果嵌套了结构体:

    嵌套的结构体要对齐到自己最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。


    位段大小:
    1.位段每次都会分配位段的类型大小的内存块

    2.位段每次从右向左分配

    3.如果放不完,则开辟新的空间

    4.   struct s{

             char a:1; 

             char : 0;

             char b;

          };

        无名位域 :0  会强迫下一个位域内存对齐 ; a:1 表示a占的1个bit大小 ;  b表示默认占一个字节的内存

  • 相关阅读:
    常用网络操作命令
    C语言中的位域[转]
    状态机——一种强大的思想利器
    9030PCI CAN驱动开发点滴
    驱动开发中应该注意的事项
    java 从网络Url中下载文件
    windows pyspider 爬虫安装
    java list去重
    Java 文件分块及合并
    工程部署到linux
  • 原文地址:https://www.cnblogs.com/Duikerdd/p/12295609.html
Copyright © 2020-2023  润新知