我读过关于如何处理大型无序映射的相互矛盾的想法,是否根据编译时已知/未知的大小在堆上或堆栈上分配它们。所以希望有人可以一劳永逸地解决这个问题,因为即使我试图将我的大地图移到堆上,visual studio 仍然警告我它需要放在堆上。
defs.cpp
unordered_map<string, string>* Keywords = new unordered_map<string, string>({...});
defs.h
extern unordered_map<string, string>* Keywords;
地图大小为55k,在代码中定义,不会随着app运行而改变。 它只需要存在并可供应用程序的许多部分访问。据我了解,
new
关键字应该已经在堆上分配了?
非常感谢任何帮助,谢谢。
std::unordered_map<K,V>
必须为其元素动态分配存储空间。要了解原因,您可以将 sizeof(std::unordered_map<K,V>)
视为编译时间常数。元素不直接存储在地图对象中,而是存储在其他地方。
其他大多数容器也是如此(
std::array
例外)。因此,您几乎不需要动态分配容器。
(假设你这样做了,那么你就不会使用
new
和原始指针。)