缩放以下两个程序结构时,速度是否存在显着差异:
map<string, std::function<string()>> myMap = {
{"hello", [](){ return " world"; }}
};
int main()
{
cout << "hello" << myMap["hello"]();
return 0;
}
VS
int main()
{
map<string, std::function<string()>> myMap;
myMap["hello"] = [](){ return " world"; };
cout << "hello" << myMap["hello"]();
return 0;
}
我的一部分想要认为全局初始化的myMap
会更快,但由于map是stl
的一部分,这让我觉得实际的地图不可能在运行时填充因为它在内部使用动态内存分配(不像全局初始化的int数组,例如,它被烘焙到可执行文件中)。我是否正确地认为这两种方法几乎相同,只要减少在地图中查找某些内容的时间量就可以了?
答案 0 :(得分:1)
您可以在程序开始运行之前初始化全局地图。两种初始化形式之间没有性能差异,只是它是在main
开始之前还是之后发生的差异。在访问地图时,查找时间没有差别。
与C程序不同,当初始化需要在运行时构造的全局变量时,C ++程序具有动态初始化阶段。这与静态初始化不同,后者是简单类型(例如具有常量初始化器的int数组)获取其值的方式,这通常在编译时完成并烘焙到可执行文件中。