码迷,mamicode.com
首页 > 编程语言 > 详细

C语言内存对齐对则

时间:2017-04-15 13:30:50      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:整数   否则   对齐   开始   typedef   struct   span   ret   height   

  

这篇文章讲的非常好  :  http://blog.csdn.net/hairetz/article/details/4084088

 

用空间换时间,  

规则 : 每个数据成员存储的起始位置都要是它的整数被或者它子成员的整数倍,  并且结构体总长度是它内部最大成员的整数倍, 不足补齐.

#include<stdio.h>

typedef struct a{
 int id;             //[0]...[3]
 double height;      //[8]...[15]
 char name[10];     //[20]...[29]       //整体长度必须为 8 的整数倍, 否则自动补齐,  所以长度是 32, 符合8的整数倍
}A;

typedef struct b
{
 int  no;         //[0]...[3]
 A b;             //[8]......[40]  A中成员最大为8 , 不是10.   所以从8的整数倍开始。   总长度为 40, 符合8的整数倍
}B;

int main(){
    printf("%d %d\n", sizeof(A), sizeof(B));
    exit(0);
}

 

 

 

可以使用  #pragma pack(n)  使用自己的对齐方式. 

 #pragma pack(1) 屏蔽掉了内存对齐.

C语言内存对齐对则

标签:整数   否则   对齐   开始   typedef   struct   span   ret   height   

原文地址:http://www.cnblogs.com/tanxing/p/6713989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!