Ben*_*ois 4 c++ memory-management dynamic-memory-allocation
考虑具有相同效果的 3 个版本的代码:
版本1:
int main() {
std::map<int,int> x = {{0,0}, {1,1}, {2,2}};
// Do some stuff...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
版本2:
int main() {
std::map<int,int> x;
x[0] = 0;
x[1] = 1;
x[2] = 2;
// Do some stuff...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
版本3:
int main() {
std::map<int,int> x;
x.insert(std::pair<int,int>(0,0));
x.insert(std::pair<int,int>(1,1));
x.insert(std::pair<int,int>(2,2));
// Do some stuff...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这些代码的效率是多少?
我认为版本 1 是完全静态分配:x
分配一次所需的空间并设置值。我还认为版本 3 需要动态分配:每次调用 insert 都会检查该键是否尚未使用,检查插入位置并在分配值之前分配更多空间来映射。对于版本 2,我不确定。你能帮我吗?
C++ 标准对分配是发生在编译时还是运行时没有要求。所有这些意味着实现可以自由地进行自己的优化(或不进行优化)。
所以正确的做法是进行测试。
此类优化很可能尚未实施。没有 的constexpr
构造函数std::map
,尽管std::initializer_list
您在此处创建的 可能是编译时常量(请注意,此处也没有执行聚合初始化)
std::map<int,int> x = {{0,0}, {1,1}, {2,2}};
Run Code Online (Sandbox Code Playgroud)