zoukankan      html  css  js  c++  java
  • 内存对齐: 结构体和位段大小的计算

    内存对齐出现的背景: 现代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表示默认占一个字节的内存

  • 相关阅读:
    docker创建tomcat容器
    【转载】张一鸣:为什么 BAT 挖不走我们的人才?
    Elastic认证考试,请先看这一篇
    vs code 初始化vue项目框架
    Idea集成git常用命令
    pxc搭建mysql集群
    mysql无限级分类
    Java面试题大全
    SpringMVC和Spring
    Redis高级特性
  • 原文地址:https://www.cnblogs.com/Duikerdd/p/12295609.html
Copyright © 2011-2022 走看看