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/