1

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

C++11 的vector构造函数只接受 asize_t和 0 初始化值呢?在一般情况下向操作系统询问归零页面,还是需要初始化它的自身,因为vector' 的元素可能是具有默认初始化程序的类,它将成员默认为非零值?

4

1 回答 1

3

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

但是,这并不意味着std::vector<int>可以只向操作系统请求归零内存。即使您更换了后者,它仍然必须经过std::allocatorand 。::operator new

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

于 2016-05-20T13:13:54.070 回答