关于栈的分配

yyhtsm 2010-09-12 11:30:15
数组只能静态分配,因为局部变量是分配在栈中的。在编译时必须确定内存分配给栈的大小。
那么容器(如vector)也是分配在栈中的,为什么它就能实现动态分配?
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2010-09-12
  • 打赏
  • 举报
回复
这个看源码就有答案饿了
yyhtsm 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
引用楼主 yyhtsm 的回复:
数组只能静态分配,因为局部变量是分配在栈中的。在编译时必须确定内存分配给栈的大小。
那么容器(如vector)也是分配在栈中的,为什么它就能实现动态分配?

里面是有一个指针成员 指向的是堆内存空间
[/Quote]
果然如此,又是pengzhixi,受教了,谢谢你
Bot制造师 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yyhtsm 的回复:]
引用 1 楼 kingstarer 的回复:
容器内部实现在堆上分配空间

不是吧
int a=1;
vector<int> iv(5);

cout << &a << '\t' << &iv.begin() << endl;
结果是:0012ff54 0012ff64
是连续存放的
[/Quote]
连续排放不一定就是栈,堆内存只是可能不连续排放,不一定就肯定不是连续排放,只是操作系统会选择合适的时机去整理堆上的内存块
pengzhixi 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 yyhtsm 的回复:]
数组只能静态分配,因为局部变量是分配在栈中的。在编译时必须确定内存分配给栈的大小。
那么容器(如vector)也是分配在栈中的,为什么它就能实现动态分配?
[/Quote]
里面是有一个指针成员 指向的是堆内存空间
yyhtsm 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingstarer 的回复:]
容器内部实现在堆上分配空间
[/Quote]
不是吧
int a=1;
vector<int> iv(5);

cout << &a << '\t' << &iv.begin() << endl;
结果是:0012ff54 0012ff64
是连续存放的
kingstarer 2010-09-12
  • 打赏
  • 举报
回复
容器内部实现在堆上分配空间

65,204

社区成员

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

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