返回信息流class T
{
public :
T()
{
T::m_date++;
}
private:
int mm,nn;
float ff;
char ch;
static int m_date;
};
int T::m_date=3;
void main()
{
T t;
int e=sizeof(t);
printf("size of t =%d\n", e);
getchar();
}
sizeof(t)=16
如果只去掉两个int型变量mm和nn,sizeof(t)=8
再把浮点变量ff去掉以后 sizeof(t)=1,也就是char ch 并没有被分配内存空间
如果只去掉char ch以后sizeof(t)=12,这样看来char 被分配了一个4个字节的内存空间,
静态整形变量m_date也没有被分配内存空间,
把其他的东西全都去掉以后sizeof(t)还是等于1
这是一条镜像帖。来源:北邮人论坛 / soft-design / #14278同步于 2007/1/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
关于内存分配问题
buptbirthday
2007/1/5镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
align问题
还有你那个char没有分配是不对的
这里应该是#pragma pack 1的结果
印象中应该是2,4,8对齐的,不一定准确
【 在 buptbirthday (汤汤) 的大作中提到: 】
: class T
: {
: public :
: ...................
sizeof(t)=16 是因为字节对其造成的。mm,nn,ff各占4个字节.char站1个字节.编译器默认会按机器长度的字节对其.所以填充3个字节.=16个.去掉mm,nn道理一样。在把ff去掉,只剩一个字节char。没有必要再进行字节对其。并不是没有分配内存。static变量不是没有分配内存,是在一个特殊的地方分配了内存。把所有成员变量去掉之后,class大小为1,这是编译器填充得一个字节。否则,这样的对象将在内存中没有位置。