有什么问题?
VC缺省情况下是按 #pragma pack(4)执行的
如果是这样的话,
typedef struct {
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
这个结果的答案是1,而不是4哦
----------------解决方案--------------------------------------------------------
mytc下是3,
dvec++是8。
10楼发现的也很奇怪,除了编译器的问题,顺序也有问题?
高人指点。。
----------------解决方案--------------------------------------------------------
楼上好像已经解释了!是由于字节对齐引起的。不过还是不太明白。
----------------解决方案--------------------------------------------------------
如果是这样的话,
typedef struct {
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
这个结果的答案是1,而不是4哦
我的妈咪呀! 为什么以前用是4的.
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
main () {
char *d = (char*)malloc(1);
printf("%d\n",sizeof(d));
}
这就是4啦.
----------------解决方案--------------------------------------------------------
恩,你可以看看Insert The C++ Mode中有具体描述,在VC以及其他某些编译器中他们对内存的分配方式是按照4的整数倍进行分配内存,这样可以达到对内存方便管理的功效,所以可能会损失一些内存空间,但是对于问题的方便解决,损失一点内存,又有多少人会去在乎他呢,何况现在内存的价格,呵呵,而且对于每一个结构损失<=3个字节,一个大工程也不过用到几百个类,合起来也不过就K级单位,呵呵,当然在什么单片机什么的上就不知道了,呵呵,也许他们的内存分配方式不一样,可能会省用点呢。具体请那位更有研究的高手解释下。
----------------解决方案--------------------------------------------------------
呵呵,楼上的,你测试的是指针,大小肯定是4个,呵呵,这个不用再多说了
----------------解决方案--------------------------------------------------------
的确,指针是4个位. 哎....
----------------解决方案--------------------------------------------------------
以下只是我的猜测。
终于明白了为什么以前看到的总是以4位对齐,
因为以前的总是大于4位的。
typedef struct {
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
的的确是1。
没超过4位,不会按4位对齐。
typedef struct {
int b;
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
就是8啦。
因为它已经超过4位, 按照标准它是5,
5位按4位对齐,那就是8啦。
----------------解决方案--------------------------------------------------------