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

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

本文关键字:是否 calloc 初始化 向量 一个 当我      更新时间:2023-10-16

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

那么 C++11 的 vector 构造函数只接受一个size_t并将值初始化为 0 呢?在一般情况下,要求操作系统提供清零页面,或者它是否需要初始化它的自身,因为vector的元素可能是具有默认初始值设定项的类,该初始值设定项默认成员为非零值?

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

但是,这并不意味着std::vector<int>可以只要求操作系统提供零内存。它仍然需要经过std::allocator::operator new,即使你更换了后者。

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