<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[C++11 STL Threads - Speicherproblem (erledigt)]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>ich habe einen Fall, in dem ich zur Parallelisierung von Berechnungen mehrfach<br />
STL-Threads starte und wieder joine.<br />
Umgebung:<br />
Codeblocks 13.12 mit mingw64-Compiler, Windows7 64bit</p>
<p>Laut Windows-Taskmanager steigt der Speicherkonsum der Anwendung stark an, obwohl das laut Sourcecode eigentlich nicht passieren sollte.</p>
<p>Ich habe meinen Anwendungsfall mal stark reduziert.<br />
Das Problem tritt aber noch auf.</p>
<pre><code>#include &lt;vector&gt;
#include &lt;thread&gt;

int main( int argc, char **argv )
{
    for ( unsigned j = 0; j &lt; 10000; ++j )
    {
        std::vector&lt;std::thread&gt; Threads;

        // Erzeugen Threads
        for ( unsigned i = 0; i &lt; 40; ++i )
            Threads.push_back( std::thread( []( unsigned i ) { for ( unsigned k = 0; k &lt; 1000000; ++k ) ++i; }, i ) );

        // Warten bis Threads fertig sind
        for( auto &amp;th : Threads )
            th.join();
    }
    return 0;
}
</code></pre>
<p>Ist das irgendwie erklärbar? Hoffentlich kein Memory-Leak in der Thread-Implementation... Oder einfach eine Falschaussage des Taskmanagers?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/336775/c-11-stl-threads-speicherproblem-erledigt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 20:35:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336775.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Feb 2016 09:02:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Wed, 17 Feb 2016 08:31:24 GMT]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>ich habe einen Fall, in dem ich zur Parallelisierung von Berechnungen mehrfach<br />
STL-Threads starte und wieder joine.<br />
Umgebung:<br />
Codeblocks 13.12 mit mingw64-Compiler, Windows7 64bit</p>
<p>Laut Windows-Taskmanager steigt der Speicherkonsum der Anwendung stark an, obwohl das laut Sourcecode eigentlich nicht passieren sollte.</p>
<p>Ich habe meinen Anwendungsfall mal stark reduziert.<br />
Das Problem tritt aber noch auf.</p>
<pre><code>#include &lt;vector&gt;
#include &lt;thread&gt;

int main( int argc, char **argv )
{
    for ( unsigned j = 0; j &lt; 10000; ++j )
    {
        std::vector&lt;std::thread&gt; Threads;

        // Erzeugen Threads
        for ( unsigned i = 0; i &lt; 40; ++i )
            Threads.push_back( std::thread( []( unsigned i ) { for ( unsigned k = 0; k &lt; 1000000; ++k ) ++i; }, i ) );

        // Warten bis Threads fertig sind
        for( auto &amp;th : Threads )
            th.join();
    }
    return 0;
}
</code></pre>
<p>Ist das irgendwie erklärbar? Hoffentlich kein Memory-Leak in der Thread-Implementation... Oder einfach eine Falschaussage des Taskmanagers?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487336</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 17 Feb 2016 08:31:24 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 09:47:50 GMT]]></title><description><![CDATA[<p>Und wo wird da Speicher freigegeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487343</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 16 Feb 2016 09:47:50 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 09:48:26 GMT]]></title><description><![CDATA[<p>Ich gehe davon aus, dass die Thread-Objekte sauber sterben, wenn der Vector stirbt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487344</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Tue, 16 Feb 2016 09:48:26 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 09:55:08 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Ich gehe davon aus, dass die Thread-Objekte sauber sterben, wenn der Vector stirbt.</p>
</blockquote>
<p>D.h., der Speicherverbrauch steigt mit der Anzahl der Iterationen der äusseren Schleife? Wie viel pro Iteration?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487345</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 16 Feb 2016 09:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 10:29:53 GMT]]></title><description><![CDATA[<p>Sicher dass du in der Schleife des Lambdas i erhöhen willst und nicht k?<br />
Mein MSVC2015 sagt nämlich Error dazu (was ja auch logisch ist, der kann ja keine Variablen capturen). Wenn ich den parameter des Lambdas umbenenne und auch eben das Inkrement anpasse gehts.<br />
Aber von Speicheranstieg keine Spur.</p>
<pre><code>#include &lt;vector&gt;
#include &lt;thread&gt;

int main(int argc, char **argv)
{
	for (unsigned j = 0; j &lt; 10000; ++j)
	{
		std::vector&lt;std::thread&gt; Threads;

		// Erzeugen Threads
		for (unsigned i = 0; i &lt; 40; ++i)
			Threads.push_back(
				std::thread(
					[](unsigned x) // dieses war vorher i
		{
			for (unsigned k = 0; k &lt; 1000000; ++k)
				++x; // das war auch i
		}, i));

		// Warten bis Threads fertig sind
		for (auto &amp;th : Threads)
			th.join();
	}
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2487350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487350</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 16 Feb 2016 10:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 11:53:54 GMT]]></title><description><![CDATA[<p>Du hast doch jetzt nur mein &quot;i&quot; im Lambda einfach umbenannt. Das ändert doch nichts. Da das Lamba keinen Zugriff auf die äußeren Variablen hat ( &quot;[ ]&quot; ), stört das nicht, dass das &quot;i&quot; quasi auf den ersten Blick doppelt ist.</p>
<p>Ich habe das jetzt bei mir auf meinem Linux laufen lassen und da war im &quot;top&quot; auch keine Spur von Anstieg. Scheint bei mir wirklich ein Fehler im Taskmanager zu sein, bzw. eine Fehlwahrnehmung. Ich kriege ja auch kein BadAlloc...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487362</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Tue, 16 Feb 2016 11:53:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 11:55:04 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>It0101 schrieb:</p>
<blockquote>
<p>Ich gehe davon aus, dass die Thread-Objekte sauber sterben, wenn der Vector stirbt.</p>
</blockquote>
<p>D.h., der Speicherverbrauch steigt mit der Anzahl der Iterationen der äusseren Schleife? Wie viel pro Iteration?</p>
</blockquote>
<p>Es war in dem Fall ein paar MB pro Sekunde... keine Ahnung wie viel pro Iteration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487363</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Tue, 16 Feb 2016 11:55:04 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 12:08:42 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Es war in dem Fall ein paar MB pro Sekunde... keine Ahnung wie viel pro Iteration.</p>
</blockquote>
<p>Mit VS 2015 steigt es langsam von 0,7 MB auf 1,5 MB am Ende an. Wenn man zigtausende Threads startet und schließt, bleibt vielleicht auch etwas Müll liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487366</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 16 Feb 2016 12:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Tue, 16 Feb 2016 12:30:55 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Laut Windows-Taskmanager steigt der Speicherkonsum der Anwendung stark an, obwohl das laut Sourcecode eigentlich nicht passieren sollte.</p>
</blockquote>
<p>Du vergisst hierbei den Stack. Jeder Thread bekommt seinen eigenen Stack. Die Größe des Stacks kannst Du aber leider nicht über die C++11 Thread API beeinflussen. Das ist system- und implementierungsspezifisch.</p>
<p>Relevant:<br />
<a href="https://stackoverflow.com/questions/13871763/how-to-set-the-stacksize-with-c11-stdthread" rel="nofollow">https://stackoverflow.com/questions/13871763/how-to-set-the-stacksize-with-c11-stdthread</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487368</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 16 Feb 2016 12:30:55 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Wed, 17 Feb 2016 08:31:00 GMT]]></title><description><![CDATA[<p>Der Stack eines Threads wird aber wieder freigegeben, sobald der Thread stirbt. Und das tun meine Threads hoffentlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<p>Unter Linux steigt der Speicher nicht an. Daher ist das bei mir einfach dem dämlichen TaskManager von Windoof geschuldet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487533</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 17 Feb 2016 08:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to C++11 STL Threads - Speicherproblem (erledigt) on Wed, 17 Feb 2016 08:38:42 GMT]]></title><description><![CDATA[<p>Taskmanager sind keine Profilingtools. Taskmanager sind als nette, bunte Übersicht für DAUs gedacht, welche Anwendung ungefähr was macht. Was da tatsächlich angezeigt wird ist ziemlich komplex und für die Analyse von Programmen ungeeignet. Wenn du deine Programme analysieren willst, nutz Werkzeuge, die dafür gedacht sind. Damit bekommst du genauere Informationen, deren Bedeutung klarer definiert ist und die für die Programmierung tatsächlich relevant sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2487534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2487534</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 17 Feb 2016 08:38:42 GMT</pubDate></item></channel></rss>