zoukankan      html  css  js  c++  java
  • C语言结构体变量内存分配与地址对齐

    地址对齐简单来说就是为了提高访问内存的速度。

    数组的地址分配比较简单,由于数据类型相同,地址对齐是一件自然而然的事情。

    结构体由于存在不同基本数据类型的组合,所以地址对齐存在不同情况,但总体来说有以下规则:

    原则1:数据成员对齐规则:结构的数据成员,第一个数据成员放在偏移量(offset)为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。

    原则2:收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。

    原则3:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)

    比如

    struct type1 {int a; double b;}

    如果:int 占4个字节,double占8个字节;

    1.分析对齐规则:

    int 偏移量为0,如果在int后直接存double,double的起始位置就是4,不符合对齐规则,所以double起始位置为8。

    2.分析收尾规则:

    int占4个字节,补4个字节,double占8个字节。一共16个字节,是内部最大成员(8)的整数倍。所以sizeof(type1)=16;

  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/holyprince/p/4540488.html
Copyright © 2011-2022 走看看