首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

sizeof有关问题 求解

2012-09-08 
sizeof问题 求解typedef struct MEM{int q1char q2char q3}memint main(int argc, char *argv[]){unsi

sizeof问题 求解
typedef struct MEM
{
  int q1;
  char q2;
  char q3;
}mem;
 
int main(int argc, char *argv[])
{
  unsigned char b;
  mem m;
  b = sizeof(m);
  printf("b = %d\n", b);
  return 0;
}
为什么输出b的值是8呢? 不应该是12吗?

而下面程序输出的b值为12, 为什么这次b值不为8了呢?
typedef struct MEM
{
  char q3;
  int q1;
  char q2;
}mem;
 
int main(int argc, char *argv[])
{
  unsigned char b;
  mem m;
  b = sizeof(m);
  printf("b = %d\n", b);
  return 0;
}


[解决办法]
字节对齐,32位系统,通常为4个字节。

int q1; // 4个字节
char q2; // 1个字节
char q3; // 1个字节
填充 //填充2字节
总共8

char q3; //1个字节 不够4个字节
填充 //填充3个字节
int q1; //4个字节
char q2; //1个字节 不够4个字节
填充 //填充3个字节 
总共12
[解决办法]
看这个:
三谈内存对齐问题

热点排行