1

したがってcalloc、ヒープ上のゼロ化されたページを取得するために OS を呼び出します: https://stackoverflow.com/a/2688522/2642059

a のみを取り、値を 0 で初期化するC++11 のvectorコンストラクターはどうですか? size_t一般的なケースでOSにゼロ化されたページを要求しますか、それとも、vectorの要素がデフォルトの初期化子を持つクラスである可能性があるため、それ自体を初期化する必要がありますか?

4

1 に答える 1

3

std::vector<T>は実装の一部です。つまり、結果だけを見ることができ、必ずしも舞台裏の魔法を見ることができるわけではありません。std::vector<T>さらに、観測可能な結果が同じままである限り、実装自体が (部分的に) 特殊化される場合があります。

std::vector<int>ただし、これは、OS にゼロ化されたメモリを要求できるという意味ではありません。後者を置き換えたとしても、std::allocatorとを通過する必要があります。::operator new

もちろん、コンパイラの魔法の法則により、コンパイラがあなたが知らないことを知っている場合でも、OS に直接問い合わせることができます。しかし、そのロジックの主な問題は、個別のコンパイルです。を含む A.cpp をコンパイルするときstd::vector<int>、コンパイラは B.cpp に が含まれていることを認識しません::operator new

于 2016-05-20T13:13:54.070 に答える