嵌套std::vector内存布局及栈溢出风险咨询
全局嵌套std::vector的内存布局与栈溢出问题
- 先纠正你一个关键误解:全局的
vector<vector<data>> V实例不在栈上,它存在全局/静态存储区——这块内存是程序启动时就分配好的,和栈完全无关。 - 剩下的理解是对的:不管是外层vector里的那些
vector<data>对象,还是这些内层vector存的data元素,所有实际数据全是在堆上分配的。 - 关于栈溢出的担忧完全没必要:
- 全局vector本身占的内存极小,一般就是三个指针的大小(指向数据起始、已用末尾、容量上限),这点空间根本不会碰栈。
- 你运行时添加的所有数据,不管是内层vector还是具体的
data,都在堆上动态分配,栈空间完全不会被这些数据占用。只有堆内存被耗尽时才会出问题(比如抛出std::bad_alloc),和栈没关系。
对应你的内存布局图验证
全局存储区:存放外层
V这个vector对象(仅三个指针)
堆内存:
- 第一块连续内存:存储所有你添加的
vector<data>实例(每个实例同样是三个指针),这块内存由V的指针指向- 多块独立的堆内存:每块对应一个内层
vector<data>管理的data元素集合,由各自内层vector的指针分别指向
内容的提问来源于stack exchange,提问作者Sliferslacker
相关产品推荐
相关产品推荐

