在内存中占几个字节?
如:
struct xxx
{
char a,
int b,
char c
}
在内存中占几个字节?怎么计算得来的?
[解决办法]
google内存对齐。。
[解决办法]
一般计算是1+2(4)+1=4(6)(在TC下int2字节,在VC等下面int4字节)
但是由于编译器等原因,在结构类型后面还会有一些附加的数据,所以会比4(6)大
总结一下就是不一定。。。可以用sizeof(xxx)查看。
[解决办法]
这个跟内存对齐方式有关
为了让内存操作更快,cpu一般要求内存的起始地址满足一定的条件,比如为2,4,8的倍数等等
struct xxx { char a, //1字节 int b, //4字节 char c //1字节}
[解决办法]
和编译器有关,不同的编译器int型占得字节数是不同的,char一般都是一个字节
[解决办法]
字节对齐
[解决办法]
如:
struct xxx
{
char a,
int b,
char c
} ;
在vc编译器中,int占用4个字节,所以该结构体占用字节为1+4+1=6。
在tc编译器中,int占用2个字节,所以占用字节为1+2+1=4
[解决办法]
http://topic.csdn.net/u/20100108/20/83248e78-6e1f-4050-b2db-ea0c58b1a9c0.html?54997
看这个帖子里我的回答,别人的就不要看了。
看了你也不太明白,他们也不太明白。
[解决办法]
同意,跟不同的编译器有关~~
[解决办法]
这个和编译器还是有关系,编译器会对数据进行内存对齐,以提高代码执行效率
现在常用的编译器编出来一般是12
[解决办法]
12字节
具体原因请参考字节对齐
[解决办法]
学习!!!!!
[解决办法]
不一定,char占一个字节,但int型根据不同的编译器,结构是不同的,可能是两个或者四个,所以为1+2+1或者1+4+1
[解决办法]
c++中内存字节对齐原则:
一、在默认情况下,vc规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。各成员变量存放时根据在结构体中出现的顺序依次申请空间,同事按照对齐方式调整,空缺的字节vc会自动填充。同事vc为了确保结构的大小为结构的字节边界数(即该结构中所占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。
二、vc中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节就是说变量存放的起始地址的偏移量有两种情况:第一,如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认对齐方式;第二,如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构总大小必须为占用空间最大变量所占用的空间数的倍数;否则,必须为n的倍数。
[解决办法]
学习、、了,不过理论上还是4或者6个字节吧!