社区
C++ 语言
帖子详情
c++string占用内存的问题
tony124cft
2011-08-31 03:15:35
对内存问题不是很懂。请大家帮忙看看。
string tmp = “”;
for()
tmp += “aaaaaa”;
初始化一个string tmp,然后通过循环不停的给他+=值,这个时候tmp占用的内存是怎么变化的?
...全文
572
6
打赏
收藏
c++string占用内存的问题
对内存问题不是很懂。请大家帮忙看看。 string tmp = “”; for() tmp += “aaaaaa”; 初始化一个string tmp,然后通过循环不停的给他+=值,这个时候tmp占用的内存是怎么变化的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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的原型
关于
C++
中
string
定义的变量所占空间的大小
在
C++
中 使用
string
定义变量,当用sizeof()测
string
变量大小时,测得的结果为28。如下图所示: #include <iostream> #include <
string
> using namespace std; class Test { private: int m_a; float m_b; char *m_str; void show() { cout << "m_a = " << m_a << " m
string
超出
内存
限制:
C++
string
的operator+=、operator+、append与push_back
沉寂了很久,从今天开始重操旧业,做点题啥的,一方面是比较功利性的,另一方面……好吧确实是比较功利性的,没什么特殊的原因。 今天遇到了一个很有意思的
问题
:
string
超出
内存
限制。 题目其实很简单,也没什么太多的坑;虽然说测试用例里的字符串确实很大,但理论上来说是不应该出现这个
问题
的,并且我在本地测试也没有
问题
(本地是MinGW的g++)。 后来发现
问题
出在这里,比如我要实现一个字符串反转(以下是示...
[朝花夕拾]
C++
string
内存
增长策略
朝花夕拾系列缘起 时光荏苒,转眼已经毕业三年多了,而在这三年中,自己得过且过,在技术上45并无长足的长进,并且还把以往学过的知识忘记的差不多了,因此有了这个朝花夕拾的系列。寄希望于在写这些文档的同时,加深自己对
C++
技术的认识,并且建立梳理下自己的知识体系。 今天算是这个系列中的第一期,先剖析下
C++
STL 的
string
类的
内存
增长策略,这个
问题
经常在面试的时候被提及,我一般都...
c++
string
类所占字节数
string
类仅有一个数据成员,char*指针,故
string
类的大小和指针相似,在64位的运行环境下占8个字节,在32位的运行环境下占4个字节 代码: #include<iostream> #include<
string
> using namespace std; int main() {
string
a="12345678910"; cout<<sizeof(
string
)<<endl; cout<<sizeof(a)<<e
c++
string
内存
分配
每当程序将一个字母附加到字符串末尾时将发生什么呢?不能仅将已有的字符串加大,因为相邻的
内存
可能被
占用
了。因此,可能需要分配一个新的
内存
块,并将原来的内容复制到新的
内存
块单元中。如果执行了大量这样的操作,效率将非常低,因此很多
c++
实现分配一个比实际字符串大的
内存
块,为字符串提供了增大空间。然而,如果字符串不断增大,超过了
内存
卡的大小,程序将分配一个大小为原来两倍的新
内存
块,以提供足够的增啊空间,避
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章