STL使用的是堆内存还是栈内存

chllcy 2012-08-23 05:55:51

询问下诸如STL 的 vector map set 它使用的是堆内存,还是栈内存?
我肤浅的理解是堆是通过new关键字产生的,而一些变量都是用的栈。这些都是用的栈内存,另外往set里加变量,但它的sizeof好像没变。

pthread_attr_setstacksize 是设置堆的大小 我测试

pthread_attr_t attr;

pthread_attr_init( &attr );

//pthread_attr_setstacksize(&attr,10*1024*1024);

pthread_t tid;
err = pthread_create(&tid, &attr, start_thread, NULL);
if (err) {
perror("thread create error");
return -1;
}
pthread_join(tid,NULL);
pthread_attr_getstacksize(&attr,&sizes);
cout << sizes << endl;


打印出来sizes 为98304,但我在start_thread中使用int* a= new int [1024*1024];也没有任何问题,应该是会堆空间不足的??
...全文
2293 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingfeng2510 2012-08-24
  • 打赏
  • 举报
回复 3
vector map set等标准容器默认都是使用内存分配器模板类allocator管理内存的分配、释放。allocator调用new/delete操作符进行批量的内存分配。
taodm 2012-08-23
  • 打赏
  • 举报
回复
源码目前了无秘密。
去看《stl源码剖析》
xiaohuh421 2012-08-23
  • 打赏
  • 举报
回复
听说是按空间来的, 如果使用的空间较小时,就在栈上分配,如果较大,则在栈上.
但具体策略是什么样的, 要看源码才知道了.

在C++编程思想中有个例子,可以参照.是关于string类的.
冻结 2012-08-23
  • 打赏
  • 举报
回复 1
你的STL容器定义在堆上,就都在堆上。
你的STL容器定义在栈上,那就栈上一部分,堆上一部分,其中,大量的数据都是在堆上。
阿尔博特 2012-08-23
  • 打赏
  • 举报
回复
现在可以不用了解这些东西,先学会使用这些类库,然后再去研究源码,推荐先看《C++ STL》这本书,然后《STL源码剖析》

64,637

社区成员

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

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