Because list have one more pointer(previous pointer) than forward_list, so if they both hold the same number of element, i.e. 1<<30, list will use almost 1/3 more memory. Right?
Then if I repeat calling resize larger and larger, forward_list must be able to resize much larger than list.
Test code:
#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;
}
To my surprise, when the process is killed, they have almost the same size …
Anybody could interpret it?
You should find that with better memory sniffing that your initial hypothesis that a
std::list<T>will consume three times as much energy is correct. On my Windows machine, I whipped up a quick memory usage program using GetProcessMemoryInfoHere is the core of my program:
Results when running it under release build:
Here’s a quote from cplusplus.com that even says that there should be noticeable memory difference between the two containers.
Using the resize function on the lists, as you do in the posted code, the memory difference was even more pronounced with
std::list<T>consuming four times as much memory.