社区
C++ 语言
帖子详情
vector:堆和栈
xombat
2006-04-25 04:32:39
对于vector,变量是放在了堆中还是放在了栈中?还是两种情况都有。本人认为:由于sizeof(vector)=16 (vc++ 7.0中)所以,这16 byte数据是被放在了stack中,而vector中我们存放的内容,可能远大于16,被存放在了栈中。
另外:我们能不能像使用堆中的内存空间一样使用栈中的内存,也就是能不能动态分配栈free空间?
分少了点,等有了分再加吧。
...全文
1853
13
打赏
收藏
vector:堆和栈
对于vector,变量是放在了堆中还是放在了栈中?还是两种情况都有。本人认为:由于sizeof(vector)=16 (vc++ 7.0中)所以,这16 byte数据是被放在了stack中,而vector中我们存放的内容,可能远大于16,被存放在了栈中。 另外:我们能不能像使用堆中的内存空间一样使用栈中的内存,也就是能不能动态分配栈free空间? 分少了点,等有了分再加吧。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
塘外人
2006-05-09
打赏
举报
回复
楼上的,这里说的vector在哪分配是指 它后面的数组放在哪儿!不知道你有没有看过vector的源码? vector类的成员其实是个指针,通过指针来分配动态数组,
不好意思,今天才看到这些话
我想指出其中的错误:
vector类的成员其实是指针,我想意思是说vector中的元素是指针吧?
那么请问vector<int> 与 vector<int*>的区别是什么?难道前者存放的也是指针,儿后者则是指针的指针?
scutcs
2006-04-26
打赏
举报
回复
没事没事,高手也有粗心的时候,不用这么多面子问题吧? 俺们菜鸟看来也有优势的时候,就是说话不避讳, 有问马上提,哈哈
adintr
2006-04-26
打赏
举报
回复
当然不能了,你把你前面的编辑了,
别人看到后面的回复就不知所云了呵
healer_kx
2006-04-26
打赏
举报
回复
再问一句,以前发的帖子可以编辑嘛?
汗。。。
healer_kx
2006-04-26
打赏
举报
回复
... ...
push_back(T())
比较。。。头大~
这个也是在堆中分配了。。。一般是拷贝构造到堆上的。
wengerbin
2006-04-26
打赏
举报
回复
haha ~~~
Wolf0403
2006-04-25
打赏
举报
回复
寒一下甘草。。。最近饼子们怎么都。。。
>> 我们能不能像使用堆中的内存空间一样使用栈中的内存,也就是能不能动态分配栈free空间?
GNU Glibc 提供了 alloca 函数分配栈空间,但是要求是在 GNU Gcc toolchain 环境下才能使用(binutils, ld 等),不具有可移植性。
dukang_2005
2006-04-25
打赏
举报
回复
楼上的,这里说的vector在哪分配是指 它后面的数组放在哪儿!不知道你有没有看过vector的源码? vector类的成员其实是个指针,通过指针来分配动态数组,vector的指针成员当然是栈区了,我们声明变量无外乎这几种全局变量,静态变量,局部变量! 全局变量,静态变量都是在静态全局区分配的,剩下的就是函数里的局部变量了,局部变量是全部都在栈区的,动态怎么可能有我们声明的变量!
塘外人
2006-04-25
打赏
举报
回复
1
楼上的说,栈是用来函数调用时分给局部变量的,又说vector是在堆中分配的
真是自相矛盾啊,
这里的vector对象本身就是局部变量啊
所以是在栈中分配的
另外, 谨记:vector对象中存放的是原始对象的副本
如: string s("Hello");
vector<string> sv;
sv.push_back(s);
则,sv中放了s的副本,此时,sv 和 s 这两个对象都在栈中(假设它们都是某函数的局部变量)
dukang_2005
2006-04-25
打赏
举报
回复
vector是在堆中分配的,栈是用来函数调用时分给局部变量的,嵌套的越深栈用的越多!
函数退出的时候就自动退栈了(通过ebp寄存器的加减),不用你去管理的!
栈中的内存是不会动态分配给你的!
假设能分配的话,某个指针指向栈区,如果我后面有函数调用,那么调用函数肯定得用栈,就会把你的值冲掉,
adintr
2006-04-25
打赏
举报
回复
vector 中存储的内容默认是在堆中分配的,你可以指定自己的空间配置器来改变这种行为。
栈的空间也是可以动态分配的,但不是 C++ 的标准,VC 做了扩展后可以的。
C99 的可变数组就是动态在栈中分配空间的。
adintr
2006-04-25
打赏
举报
回复
寒楼上一个,
vector<T> 却 push_back(T*)
healer_kx
2006-04-25
打赏
举报
回复
function():
vector<T> a;
a.push_back(new T());
a在栈上,
T元素在堆上。
[汇总I]精选微软等数据结构+算法面试100题[第1-60题]
资源说明: 此份,是为微软等公司数据结构+算法面试100 题,之前60 题的汇总。 总结整理了前第1 题-第60 题。特此并作此一份上传。以飨各位。:)。 此绝对值得你下载收藏。 ----------------------------- 网友yui评论,真是够多的了,从此,不用再看其它面试题.... 一句话,请享用。 July、2010/11.12. ------------------------------------------------ 其它资源,下载地址: [最新整理公布][汇总II]微软等数据结构+算法面试100题[第1-80题] http://download.csdn.net/source/2846055 1.[最新答案V0.3版]微软等数据结构+算法面试100题[第21-40题答案] http://download.csdn.net/source/2832862 2.[第1题-60题汇总]微软等数据结构+算法面试100题 http://download.csdn.net/source/2826690 3.[答案V0.2版]精选微软数据结构+算法面试100题[前20题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 4.[答案V0.1版]精选微软数据结构+算法面试100题[前25题] http://download.csdn.net/source/2796735 5.[第二部分]精选微软等公司结构+算法面试100题[前41-60题]: http://download.csdn.net/source/2811703 6.[第一部分]精选微软等公司数据结构+算法经典面试100题[1-40题] http://download.csdn.net/source/2778852 更多资源,下载地址: http://v_july_v.download.csdn.net/ ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
微软公司等数据结构+算法面试100题(第1-100题)全部出炉
微软公司等数据结构+算法面试100题(第1-100题)全部出炉
vector
在
堆
上还是在
栈
上(等待自己慢慢领悟吧)
探索1: ME:: L,
vector
变量是存放在
堆
上还是
栈
上的?网上说法不一,我也没有找到权威的表述L:
堆
、
栈
和
vector
有啥关系?L: 你把它放哪里,它就在哪里ME: [分享]
堆
、
栈
的地址高低?
栈
的增长方向? https://www.zhihu.com/question/36103513?sort=createdME: 这个例子作者认为
vector
在
堆
上.L:
vector
管理的内存...
C++之
vector
::insert与
vector
::insert应用总结(二百二十二)
本篇目的:理解C++之
vector
::insert与
vector
::insert用法区别。在C++的容器中,insert和push_back是两个不同的方法,用于向向量中添加元素的方式有所差异。insert方法允许在向量的任意位置插入一个或多个元素。它接受两个迭代器参数,第一个参数指定了插入位置,第二个参数指定了要插入的元素。插入后,原有的元素会向后移动,腾出空间给新插入的元素。insert方法还可以接受一个范围的迭代器,用于指定要插入的一段元素。push_back方法用于在向量的末尾添加单个元素。
堆
和
栈
的区别——
vector
引发的思考
在使用
vector
这个结构的时候,如果
vector
在函数内部直接定义,则对象存储在
栈
上,数据存储在
堆
上;而通过new动态创建时,指针在
栈
上,对象和数据都在
堆
上。同时,at()方法提供了越界检查,但会带来额外的时间开销。无论哪种方式,
vector
的数据总是位于
堆
上。那么为什么会有
堆
和
栈
呢?本文将对
堆
和
栈
的区别,内存静态分配和动态分配,智能指针进行了介绍,总结一下就是
堆
可以对
栈
进行补充,动态分配内存,智能指针可以自动管理动态分配的对象,避免内存泄漏和资源未正确释放的问题。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章