首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vector<T>的内存结构

vector<T>的内存结构
EN

Stack Overflow用户
提问于 2014-12-14 04:33:29
回答 1查看 829关注 0票数 1

我正在c++中玩向量,我试图弄清楚向量在内存中的样子.

我做了一个像这样的向量:vector<int> numbers = { 1, 2, 3, 4, 5, 6 };,并提取了几个关于向量的信息。

&numbers:002EF8B8

begin()._Ptr:0031A538

end()._Ptr:0031A550

矢量存储器位置002EF8B8处的数据:

00 9d 31 00 38 a5 31 00 50 a5 31 00 50 a5 31 00 cc 30 31 82 1 f

找到了存储在那里的begin()._Ptrend()._Ptr地址。

在该地址范围内找到的整数:

内存位置第1 int : 0031A538 = 01 00 00 00

内存位置第2 int : 0031A53C = 02 00 00 00

内存位置第3 int : 0031A540 = 03 00 00 00

位于内存位置的第4 int : 0031A544 = 04 00 00 00

位于内存位置的第5 int : 0031A548 = 05 00 00 00

位于内存位置的第6 int : 0031A54C = 06 00 00 00

问题:

如果002EF8B8是向量的内存位置,31 00 38 a531 00 50 a5是向量的开始和结束,那么开始的00 9d是什么,之后的数据是什么?31 00 50 a5 31 00 cc cc cc cc 30 31 82 1f

我得到了numbers.size()*sizeof(int)的大小,但我几乎可以肯定,这不是内存中向量的实际大小。

能否有人向我解释如何得到实际向量的大小,以及它的每个部分代表什么?

类似于:

数据大小[2 bytes] [4 bytes] [4 bytes] [? bytes]

数据含义为[something] [begin] [end] [something else]

编辑: bcrist建议使用/d1reportAllClassLayout并生成此输出。

代码语言:javascript
复制
1>  class ?$_Vector_val@U?$_Simple_types@H@std@@    size(16):
1>      +---
1>      | +--- (base class _Container_base12)
1>   0  | | _Myproxy
1>      | +---
1>   4  | _Myfirst
1>   8  | _Mylast
1>  12  | _Myend
1>      +---

它基本上是[_Myproxy] [_Myfirst] [_Mylast] [_Myend]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-14 04:43:29

你曲解了字节。在一台小型端机器上,值0x0031A538用字节序列38 A5 31 00表示。所以你的亮点变了。

实际上,这里有四个地址: 0x00319D00、0x0031A538、0x0031A550和0x0031A550。

一个向量最少需要三个值来控制它的数据,其中之一显然是矢量基。另外两个可以是指向向量结束和分配区域结束的指针,也可以是大小。

0x0031A538显然是矢量基,0x0031A550既是其末端,也是分配区域的末端。那么,还需要解释的是0x00319D00的值。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27466373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档