list には forward_list よりもポインター (前のポインター) が 1 つ多いため、両方が同じ数の要素を保持している場合、つまり 1<<30 の場合、list はほぼ 1/3 のメモリを使用します。右?
次に、サイズ変更を繰り返して大きくすると、forward_list はリストよりもはるかに大きくサイズ変更できる必要があります。
テストコード:
#include<forward_list>
#include<list>
#include<iostream>
int main(){
using namespace std;
typedef list<char> list_t;
//typedef forward_list<char> list_t;
list_t l;
list_t::size_type i = 0;
try{
while(1){
l.resize(i += (1<<20));
cerr<<i<<" ";
}
}
catch(...){
cerr<<endl;
}
return 0;
}
驚いたことに、プロセスが強制終了されると、それらはほぼ同じサイズになります...誰でも解釈できますか?