这不是 boost::threads,它也发生在普通的 pthreads 上。我从这里获取了示例程序(Pthread Creation and Termination),将线程数增加到 1000 并编译为纯 C,我在使用 massif 处理它时看到了相同的行为。所以要么是 pthreads 中的东西,要么是 valgrind/massif 正在做的事情。
编辑:也使用过程序(Pthread Joining)。见第二张图。
创建和终止:
KB
547.6^ #
| @@@#
| @@@@@@@#
| @@@@@@@@@@#
| @@@@@@@@@@@@@#
| ::::@@@@@@@@@@@@@#
| ::::: ::@@@@@@@@@@@@@#
| @@@::::: ::@@@@@@@@@@@@@#
| @@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@@@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@@@@@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@@@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@@@ @@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| ::@@@@@@@ @@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@::@ @@@@@ @@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@@ @::@ @@@@@ @@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| @@@@@@ @ @::@ @@@@@ @@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| :::::@@@ @@ @ @::@ @@@@@ @@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
| :@@: :: @@@ @@ @ @::@ @@@@@ @@ @@ @@ @@@@@@@@@@::::: ::@@@@@@@@@@@@@#
0 +----------------------------------------------------------------------->Mi
0 13.22
Pthread 加入,减去数学繁忙的工作:
KB
548.8^ #
| @@#::
| :::@@#::
| ::::::@@#:::
| ::::: :::@@#:::::
| @@@@::::: :::@@#:::::
| @@@@@ ::::: :::@@#:::::::
| :@@:@@@@@ ::::: :::@@#:::::::@
| @@@:@ :@@@@@ ::::: :::@@#:::::::@
| :::@ @:@ :@@@@@ ::::: :::@@#:::::::@::
| @@@:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| @:::@@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| ::@@:: @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| ::@: @@:: @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| :@@::@: @@:: @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| @@@:@ ::@: @@:: @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| @@@@@ :@ ::@: @@:: @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| @@@:@@@@@ :@ ::@: @@:: @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
| @@@@ :@@@@@ :@ ::@: @@:: @@:@ @:: @ @:@ :@@@@@ ::::: :::@@#:::::::@::
0 +----------------------------------------------------------------------->Mi
0 19.14
看起来加入最终应该会降低堆栈大小,即使在 valgrind 下也是如此。