C/C++问题求助

这两天遇到一个面试题:

面试官:vector扩容为什么不知道在后面?比如可以先判断后面的内存空间够不够,够的话直接在后面扩容,不够的话再重新申请空间并复制数据。

我:后面的空间可能已经被占用,如果判断则需要额外的数据结构去维护,这并不一定会提高效率。

面试官:可以从内存池的角度考虑考虑

我:(思考一会儿,然后瞎猜...)直接在后面可能会产生较大的内部碎片?

面试官:好,下一个问题......

所以各位佬,为什么vector不直接先判断后面的空间???
全部评论
佬,可以看看这个问题:https://www.zhihu.com/question/384869006
6 回复 分享
发布于 2023-10-16 15:41 广东
应该是动态内存分配的部分吧,应用vector申请的空间在freelist中挂在相应的位置了,如果向后扩容,freelist挂的内存首地址的空间被使用了,其他stl申请空间,可能会覆盖扩容的位置数据,所以直接扩容,取对应freelist上挂的空间吧。我猜的哈,不一定对
4 回复 分享
发布于 2023-10-16 15:38 辽宁
C++ 标准库容器的动态内存分配是交予分配器(Allocator)类处理的。故而分配器提供什么接口,标准库容器的内存操作才能用什么。从 C++98 至今标准库的分配器要求都缺少原位扩张/收缩的接口,所以 vector/basic_string 也用不了。实际上有 N3495 、P0401 、 P0894 等零星提案建议增加分配器的接口,以支持这些功能,但是这些提案都没有通过。
3 回复 分享
发布于 2023-10-29 11:34 河南
这个我的专栏有收藏在c/c++模块
2 回复 分享
发布于 2023-10-24 17:10 北京
m
点赞 回复 分享
发布于 2023-10-31 17:10 江苏
m
点赞 回复 分享
发布于 2023-10-24 18:52 新疆
m
点赞 回复 分享
发布于 2023-10-24 17:00 上海
m
点赞 回复 分享
发布于 2023-10-24 16:48 陕西

相关推荐

昨天 17:30
中南大学 Java
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
酷酷我灵儿帅:这去不去和线不线下面说实话没啥关系
点赞 评论 收藏
分享
评论
31
137
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务