您的位置:首页 > 其它

C和VC中分配变量地址的问题

2007-04-27 21:48 302 查看
#include <stdio.h>
struct struct_A
{
int a; //4
char b; //1
int c; //4
short d; //2
}a;

struct struct_B
{int a; //4
char b; //1
short c; //2
int d; //4
}b;

int main()
{
printf("%d,%d",sizeof(a),sizeof(b));
return 0;
}

上述程序在KEILC,WINTC 和VC中运行的结果分别是:
1792,1792
7,7
16,12
可见,在KEIL C和WINTC中都是按照顺序分配为变量分配地址,在VC中分配的地址指遵循 “4的倍数”原则。即如果连续几个变量的长度不超过4字节,则分配4字节内,否则分配到下4个字节开始处。
上述程序中a中的4个变量地址分别为0X13FF70,0X13FF74,0X13FF78,0X13FF7C
b中4个变量的地址分别为0X13FF74,0X13FF78,0X13FF7A,0X13FF7C

因为b中char b 和short c 可以分配在4个字节之内,所以两个变量共分配了4个字节的空间。而a中相邻两个变量的长度都超过4个字节,故为每个变量都分配了4个字节的空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: