私は少なくともおおよその答えに興味があります:
int n;
...
std::vector<void*> vectorOfPointers;
vectorOfPointers.reserve(n);
上記のプログラムは、どの数nまでO(1)で実行されますか?
3ギガバイトのメモリを搭載した32ビットUbuntuを実行し、他のプログラムを実行していないラップトップについて考えてみましょう。それは数十、数千、数百万ですか?そのような質問を評価できるようにするために、どのような情報を知る必要がありますか?実験を行わずに調べる方法はありますか?
私はオペレーティングシステムについて何も勉強したことがありませんが、私の想像では、オペレーティングシステムはたった2つのステップでメモリを割り当てます。チャンクを開始するためのポインターとチャンクの終わりのポインターを決定します。十分な大きさのメモリを取得するためにシステムを整理する必要がある場合があるため、状況はさらに複雑になる可能性があります。しかし、システムがこの1つのプログラムだけを実行していると仮定すると、必要な時間をどのように見積もることができますか?記憶の断片化以外に、考慮すべき他の側面はありますか?
編集:
申し訳ありませんが、質問を明確にしませんでした。予約を呼び出す前にベクトルが空であるため、データをコピーする必要がないことを考慮することが重要です。