当我0初始化一个向量它是否与calloc具有相同的效果?

时间:2016-05-20 13:00:11

标签: c++ c++11 vector calloc zero-initialization

因此calloc调用操作系统来检索堆上的归​​零页面:https://stackoverflow.com/a/2688522/2642059

C ++ 11的vector构造函数如何仅使用size_t并初始化值?在一般情况下要求OS获取归零页面,或者是否需要初始化它自己,因为vector的元素可能是具有默认初始化程序的类,默认成员为非零值? / p>

1 个答案:

答案 0 :(得分:2)

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

但是,这并不意味着std::vector<int>只能向操作系统询问内存是否归零。它仍然必须通过std::allocator::operator new,即使您替换了后者。

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