永发信息网

求助!!对string对象和vector对象执行sizeof运算结果

答案:2  悬赏:50  手机版
解决时间 2021-03-17 20:20
”对string对象和vector对象执行sizeof只返回该类型固定部分的大小,不会计算对象中元素占用了多少空间“这句话中“只返回该类型固定部分的大小”这是什么意思?谁能给详细解释一下
最佳答案
一个类的成员变量可大致分为两种,固定分配成员和动态分配变量,例如这样一个类:
class AClass
{
    int a,b,c;
    int *p;
    AClass()
    {
        p=new int [10];
    }
    ~AClass()
    {
        delete[] p;
    }
};直观上,它有四个成员:a,b,c,p,不过从用途上,他也可以分为三个固定分配成员a,b,c和一组动态分配成员p[10],它生成的对象实际占有的内存空间为13个int和一个int*的空间(即56 Byte)。然而,sizeof返回的则只是这个类“直观上”(也就是写在成员声明里的)的占用空间,也就是3个int和一个int*的空间(即16 Byte)。
string类和这个类很相像,它有一个动态分配的成员来存储字符串数据(因为字符串变长所以才要动态分配),而sizeof是检测不到这个内存长度的。vector同理
全部回答
有虚函数的话就有虚表,虚表保存虚函数地址,一个地址占用的长度根据编译器不同有可能不同,vs里面是8个字节,在devc++里面是4个字节。类和结构体的对齐方式相同,有两条规则 1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。 2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行 下面是我收集的关于内存对齐的一篇很好的文章: 在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的 “管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了。 一、内存对齐的原因 大部分的参考资料都是如是说的: 1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。 二、对齐规则 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
读shēn的字。
三股泉这个地址在什么地方,我要处理点事
有关香港、澳门和台湾的叙述,不正确的是A.香
求iOS7录音文件在哪?我要找一段录音,在哪个
珠海普乐美厨卫待遇怎么样?
河道中开采的沙子属于矿产吗
南牛线多少时间一班
大众菠萝安装安卓导航倒车视频闪怎么回事
红豆家纺专卖怎么去啊,有知道地址的么
15款风云2和14款有啥区别
求古龙小说中夜帝,铁中棠,楚留香,胡铁花四
书包里面被汤渍弄脏了怎么办。
急!跪求谜语的谜底!1 坐也是立,立也是立,
有间书店在哪里啊,我有事要去这个地方
在....的对面(英文)
推荐资讯
一个月大的仓鼠 要养多久才能繁殖
卓庄这个地址在什么地方,我要处理点事
卡利斯特在什么地方啊,我要过去处理事情
我的车为什么有时候在停车以后会发现车底盘下
哈佛H5二档卡不好挂,用二档起 步好挂,尤
面线煮之前要洗吗!散装面线一捆的
急 急 急 求助 西安 有什么比较好的 金融类
在matlab中fx=sum((C.*x)');是什么意思
求金刚狼中小狼女dafne keen的高清美图
首尔屋汗蒸养生馆在什么地方啊,我要过去处理
我的世界梦世界监狱风云怎么升级
缩8倍镜的时候卡帧
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?