C语言对齐、补齐

「爱情、让人受尽委屈。」 2022-06-15 08:48 386阅读 0赞

加快CPU读取数据的速度

aligned(n)
让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐

  1. struct s
  2. {
  3. char c;
  4. int i;
  5. short s;
  6. }__attribute__((aligned(1)));

sizeof:12

packed
取消编译过程中的优化对齐,按照实际占用字节数进行对齐

  1. struct s
  2. {
  3. char c;
  4. int i;
  5. short s;
  6. }__attribute__((packed));

sizeof:7

pack(n)

  1. #pragma pack(1)
  2. struct s
  3. {
  4. char c;
  5. int i;
  6. short s;
  7. };
  8. #pragma pack() //取消

sizeof:7

空间换时间

  1. struct s
  2. {
  3. char c;
  4. char reserved[3]; //空间换时间
  5. int i;
  6. };

图解
sizeof

发表评论

表情:
评论列表 (有 0 条评论,386人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C语言字节对齐

    文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。   一、概念       对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好

    相关 C语言】数据对齐

    1、 一个存储区的地址必须是它自身大小的整数倍,double(8字节)类型地址只需要4的整数倍即可,这个规则叫数据对齐 2、结构体里面的子存储区通常也需要遵守数据对齐的规则