
Conrad Mercer wrote:
I have been using boost threads on 32bit linux for some time and am very happy with their performance so far. Recently the project was moved to a 64bit platform and we saw a huge increase in memory usage (from about 2.5gb to 16-17gb). I have done profiling and found that the boost threads are the source of the huge allocation. Each thread is allocating about 10x what it was doing on 32bit.
I profiled using valgrind's massif and have confirmed the issue using only boost threads in a separate test application. I also tried using std::threads instead and these do not exhibit the large memory allocation issue.
I believe that 32-bit Linux sets the default stack size to 2 MB, and much larger on 64-bit. So I would expect to see it using much more _virtual_ memory - but if you don't actually use it, then no physical memory is ever mapped to those pages and there is no performance or other concern. A deficiency of Boost.Thread and std::thread is that they provide no way to change the stack size of new threads. This has been discussed a few times here. It is possible that the libstdc++ implementation of std::thread chooses to set a smaller default stack size. If you need control over the stack size, and if you're not concerned about portability to non-posix platforms, it is easy enough to write your own thread class wrapping the pthread calls. Regards, Phil.