c++string占用内存的问题

tony124cft 2011-08-31 03:15:35

对内存问题不是很懂。请大家帮忙看看。

string tmp = “”;

for()
tmp += “aaaaaa”;

初始化一个string tmp,然后通过循环不停的给他+=值,这个时候tmp占用的内存是怎么变化的?
...全文
572 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsdong115 2011-08-31
  • 打赏
  • 举报
回复
预先会分配一段空间,这个空间通常比初始化时的大。如果随着不断加字符,超过这个空间时,就会将原来的空间释放,分配一个更大的空间。 另外,死循环的情形,占用的内存一般不是实际的内存,而是虚拟内存。。
RLib 2011-08-31
  • 打赏
  • 举报
回复
不断增长
jackyjkchen 2011-08-31
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20110828/01/8dab7cab-fee0-40a1-802e-4b746bab3d8d.html

这是某天我和另一个人对vector的讨论,同样是连续内存,同样是有重分配效率问题,和string类似

看下就明白了
luciferisnotsatan 2011-08-31
  • 打赏
  • 举报
回复
可以看看string源代码。
基本就是原来的空间装不下了,开辟一块新的足够大的空间,把原来空间里的内容拷贝过去,再把要加的加上
jackyjkchen 2011-08-31
  • 打赏
  • 举报
回复
脱离具体环境看是没有意义的,string通常是比较紧凑的存储,内存占用不会比字符串长度大很多,但是string为了效率,延长时的内存分配是有讲究的,重分配是很慢的(分配内存本身耗时不少,加上整体拷贝)

比如比较简单的一种方式是每次重分配都分配上一次2倍的长度,这样可以明显减少重分配次数,gcc貌似这么干的

VC要复杂,他的优化更考虑时间空间的平衡
至善者善之敌 2011-08-31
  • 打赏
  • 举报
回复
可以看看STRING的原型

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧