当我0-初始化一个vector时,它和calloc有同样的效果吗?

When I 0-Initialize a vector Does It Have the Same Effect as calloc?

因此 calloc 调用 OS 以检索堆上的归​​零页面:

C++11 的 vector 构造函数如何只接受 size_t 和 0 初始化值?在一般情况下向 OS 询问归零页面,或者它是否需要初始化它自己,因为 vector 的元素可能是带有默认初始化程序的 class,默认成员到非零值?

std::vector<T>是执行的一部分,这意味着我们只能看到结果,不一定能看到幕后的魔法。此外,只要可观察的结果保持不变,实现本身就可以(部分)专门化std::vector<T>

然而,这并不意味着 std::vector<int> 可以只向 OS 请求归零内存。它仍然必须经过 std::allocator::operator new,即使你替换了后者。

当然,根据编译器的魔法法则,如果编译器知道你没有,它可能仍然会直接询问 OS。但该逻辑的主要问题是单独编译。当编译 A.cpp 包含 std::vector<int> 时,编译器不会知道 B.cpp 包含 ::operator new.