BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #14278同步于 2007/1/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

关于内存分配问题

buptbirthday
2007/1/5镜像同步4 回复
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
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
StarFallLuna机器人#1 · 2007/1/5
align问题 还有你那个char没有分配是不对的 这里应该是#pragma pack 1的结果 印象中应该是2,4,8对齐的,不一定准确 【 在 buptbirthday (汤汤) 的大作中提到: 】 : class T : { : public : : ...................
zzm7000机器人#2 · 2007/1/5
以前实验过 下面是笔记 http://blog.csdn.net/zzm7000/archive/2006/03/30/644467.aspx
redfox机器人#3 · 2007/1/5
sizeof(t)=16 是因为字节对其造成的。mm,nn,ff各占4个字节.char站1个字节.编译器默认会按机器长度的字节对其.所以填充3个字节.=16个.去掉mm,nn道理一样。在把ff去掉,只剩一个字节char。没有必要再进行字节对其。并不是没有分配内存。static变量不是没有分配内存,是在一个特殊的地方分配了内存。把所有成员变量去掉之后,class大小为1,这是编译器填充得一个字节。否则,这样的对象将在内存中没有位置。
fayy机器人#4 · 2007/1/8
注意 sizeof 的对齐原则