c++ - 如果在 VC 编译器中包含诸如 std::map 之类的容器,类的内存布局是什么

标签 c++ stl containers destructor

ClassA{
public:
std::map<int,int> m_map;
...
...
};

我已经在 visual studio 中尝试了 /d1reportSingleClassLayout 但无法真正解码输出:

1> 0 | ?$map@HHU?$less@H@std@@V?$allocator@U?$pair@$$CBHH@std@@@2@ m_map
1>28 | ......

我的理解是容器的大小不固定,所以在ClassA的Obj的内存布局中,应该存在一个指向堆中实际m_map内容的指针吧?

最佳答案

std::map 实现的精确布局取决于编写标准库的人员。它不是由 C++ 定义的。

您可以在您的构建机器上研究标准 header ,或者您可以简单地忘记它并改为编写标准 API。

但是,是的,某处会有一两个指针,指向动态分配的内存。可能相当多。

关于c++ - 如果在 VC 编译器中包含诸如 std::map 之类的容器,类的内存布局是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618430/

相关文章:

C++ MFC 序列化

c++ - Qt:使用一个连接从多个线程写入数据库

c++ - for 循环 : poor efficiency in my code 的 OpenMP 并行化

c++ - 带有自定义类指针的优先级队列断言错误

c++ - 根据它们在 C++ 中作为矩阵的位置从文件中读取数字

c++ - 如何找到 vector 中 5 个最大元素的索引?

c++ - 如何在标准 C++ 字符串中使用 3 和 4 字节的 Unicode 字符?

c++ - 在 C++ 中存储派生类的实例

docker - Dockerfile无法执行CMD命令(适用于Windows的Docker)

java - yarn 容器执行器退出代码 24 错误