容器是在哪分配的内存?

icosagon 2006-11-13 04:45:19
容器是在堆上分配的内存吗?我baidu,google没有说明白的,怎么看像都在堆上分配的内存啊?我想在栈上用容器分配小容量的内存行不行?初学stl不明白,在堆上分配效率不是没有在栈上高吗?
...全文
305 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2006-11-14
  • 打赏
  • 举报
回复
你说对了
string1 + string2重新申请内存copy过去后在删原来的string
icosagon 2006-11-13
  • 打赏
  • 举报
回复
string在我印象中怎么是不连续的,我也不记得在哪看到的这句话了,不过说回来,不连续的话
成员函数c_str()返回的不是const char *吗(难道是copy后还给个const,无法想象~~) 可是若是连续的string1 + string2又是如何实现的,难道重新申请内存copy过去后在删原来的string?有点晕
taodm 2006-11-13
  • 打赏
  • 举报
回复
如果你能力足够强,char [1024]比vector<char>(1024),能略快几百个指令周期吧。
但代码将复杂好多,出错可能性大增。
string也是连续内存。
icosagon 2006-11-13
  • 打赏
  • 举报
回复
栈归还内存是出了作用域就归还的吧,只要我没有超过1024*1024*2差不多这个数字吧,我的栈就不会出现问题吧,当然在1024够用情况下,char [1024]快,还是vector<char>(1024) (也不知这种写法正不正确)快?另外string的内存是不连续的吗?
taodm 2006-11-13
  • 打赏
  • 举报
回复
你怎么知道现在那个数组里已经放了多少字节数据?
1024,多开几个,你就栈溢出了
所以,能用vector<char>/string,就别用数组。
icosagon 2006-11-13
  • 打赏
  • 举报
回复
比如,我只需要作用域在一个函数内的情况,我用char [1024]还是vector<char>?
taodm 2006-11-13
  • 打赏
  • 举报
回复
如果真的感兴趣,看<STL源码剖析>
J_Vector 2006-11-13
  • 打赏
  • 举报
回复
关注~
OOPhaisky 2006-11-13
  • 打赏
  • 举报
回复
容器有自己的allocator,楼主可以找找开源的STL源代码看看。
容器的空间应该都是动态分配的,而非静态分配的,也就是说,不是分配在栈上的。
icosagon 2006-11-13
  • 打赏
  • 举报
回复
生存期我是知道的,不过我没在项目中用过STL,在栈上用容器确实情况很少见(我想像的),不过我真正想搞清楚的是stl的内存分配机制,alloctor在STL里是怎么回事?我一点也不明白
睡在床板下_ 2006-11-13
  • 打赏
  • 举报
回复
alloc 头文件里有..
stl 中内存分配用的是molloc
taodm 2006-11-13
  • 打赏
  • 举报
回复
栈上的东西,函数一返回就全失效了。
所以,楼主:栈里变量的生存期、堆里对象的生存期、全局对象/static局部变量的生存期问题,你搞清楚了没有?

64,642

社区成员

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

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