C++ 中标准库的内存是在堆中,还是在栈中分配?

wangcgfan 2010-09-25 10:56:02
C++ 标准库中自带的std::string类中字符数量是可以动态变化的,想问一个问题,string类内部存储字符串的内存 是在堆中还是在栈中分配的?有人了解吗?
...全文
704 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸵鸟 2010-10-01
  • 打赏
  • 举报
回复
STL容器如果定义为局部变量, 栈上一般三个指针begin, end & ?, resize之后sizeof (container)不变
元素分配在堆
qq120848369 2010-10-01
  • 打赏
  • 举报
回复
string里边就是一个指针char *,指针指向了一段内存,内存里放的就是字符串.
冻结 2010-09-25
  • 打赏
  • 举报
回复
能改变大小的容器都是在堆上。
栈上改变大小,没人会这么做吧。
冻结 2010-09-25
  • 打赏
  • 举报
回复
栈上一部分不变的。
堆上一部分可变的。
job82824 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangcgfan 的回复:]

从性能上讲,是堆上的性能好还是栈的性能好?
[/Quote]
性能上将,无论堆上的还是栈上的都好。性能的好坏是你的算法决定的,不是变量的性质决定。

动态变量有动态的好处--可伸缩;
静态变量有静态的好处--自动初始化;
没有绝对的好坏的。
Defonds 2010-09-25
  • 打赏
  • 举报
回复
是在堆上
wangcgfan 2010-09-25
  • 打赏
  • 举报
回复
从性能上讲,是堆上的性能好还是栈的性能好?
pengzhixi 2010-09-25
  • 打赏
  • 举报
回复
假设string使用一个指针实现的,那么这个指针本身是分配在栈上,但是指针指向的内存是堆上。
xingzhe2001 2010-09-25
  • 打赏
  • 举报
回复
string是堆上
辰岡墨竹 2010-09-25
  • 打赏
  • 举报
回复
STL自带的分配器无论是通过malloc还是new实现的,在Windows下都是直接调用HeapAlloc/HeapFree等堆类型API。一般STL来存放的数据都是频繁变化,且比较小的(不大于1MB),堆上足够用了。
luoqi 2010-09-25
  • 打赏
  • 举报
回复
stl模板自带内存分配器alloctor
不过,在使用时,你可以传入自己的内存管理器

alloctor一般有两种处理方法(PJL版,STL有很多版本)
1,POD类型,自己malloc
2,obj类型,调用obj的construct(一般是new placement)

而new placement一般使用编译器的new
你可以在<new.h>中找到,也可以实现自己的new替换
Sjdiao 2010-09-25
  • 打赏
  • 举报
回复
std::string 声明的变量 假如符值范围在0-15,那么他是栈分配的。如果长度超过了16那么就是在对上分的内存,debug一下就知道了。

64,668

社区成员

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

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