zoukankan      html  css  js  c++  java
  • 内存分配的字节对齐

    内存对齐:
    1.内存为了提高访问效率,规定以结构体中最大的基本单位长度为对齐标准。即实际分配的内存大小是对齐标准的整数倍。

    例一、

    1 struct student
    2 {
    3 char name[20];
    4 int age;
    5 char sex;
    6 char phone[15];
    7 };
    8 struct student stu;

    那么:sizeof(stu)的大小为20+4+1+15=40byte。如果phone[16]/[17]/[18], 结果则是44byte。因为上面的结构体中,最大的基本类型是int,所以实际大小为4的整数倍。但是为什么不以name[20]作为对齐标准呢》这里清注意是基本类型。name[20]是一个字符串数组,数组属于复合的数据类型,复合型的数据类型还有结构体,共用体。基本的数据类型是整型、字符型、和浮点型。

    例二、

    1 union data
    2 {
    3 int i;
    4 char c;
    5 char str[9];
    6 };

     sizeof(data)= 12byte。这是为什么呢?这是因为共用体的存储大小是由最大的成员来决定的,即char  str[9],但是考虑到内存对齐,它以sizeof(int)= 4byte来对齐,所以实际内存分配大小是12byte。

    例三、

    1 struct data
    2 {
    3 char c;
    4 double d;
    5 char ch;
    6 };

    这里的sizeof(data)= ??呢,也许你会认为是16,但是答案确实24,因为结构体变量是连续分配内存空间的,double d;毫无疑问分配各8byte,而char c;按照字节对齐标准分配8byte,而后面的char  ch;同理也分配8byte,所以结果是24.

    例四、

    1 struct data
    2 {
    3 double d;
    4 char c;
    5 char ch;
    6 }

    这个和上面的不同是,c和ch可以连续的放在一个8byte中,所以sizeof(data) = 16byte。

  • 相关阅读:
    Nginx URL后面不加斜杠301重定向
    Jenkins 配置 Node.js 项目
    在 Linux 上搭建IntelliJ IDEA license server服务器
    Vue 使用细节收集
    sinopia 搭建记录
    cli 开发记录
    Cgroup(一)简介
    Kubernetes (一)POD驱逐
    RabbitMQ(五)镜像队列
    RabbitMQ(四)队列结构
  • 原文地址:https://www.cnblogs.com/zhou2011/p/2384633.html
Copyright © 2011-2022 走看看