<?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[Static Function - werden daten alloziert oder nicht?]]></title><description><![CDATA[<p>Folgender Code ist gegebe:</p>
<pre><code>#include &lt;vector&gt;

struct data
{
    std::vector&lt;int&gt; vec1;
    std::vector&lt;int&gt; vec2;
    std::vector&lt;int&gt; vec3;
    std::vector&lt;int&gt; vec4;
};

struct foo
{
    static data&amp; get_data()
    {
        static data my_data;
        return my_data;
    }
};

int main()
{
    auto func = &amp;foo::get_data;
    return 0;
}
</code></pre>
<p>Meine Frage lautet, wird Speicherplatz für <code>my_data</code> alloziert, schon wen ich den Funktionspointer abspeichere oder erst wenn ich die Funktion aufrufe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337822/static-function-werden-daten-alloziert-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 19:33:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337822.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 May 2016 09:39:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 09:39:40 GMT]]></title><description><![CDATA[<p>Folgender Code ist gegebe:</p>
<pre><code>#include &lt;vector&gt;

struct data
{
    std::vector&lt;int&gt; vec1;
    std::vector&lt;int&gt; vec2;
    std::vector&lt;int&gt; vec3;
    std::vector&lt;int&gt; vec4;
};

struct foo
{
    static data&amp; get_data()
    {
        static data my_data;
        return my_data;
    }
};

int main()
{
    auto func = &amp;foo::get_data;
    return 0;
}
</code></pre>
<p>Meine Frage lautet, wird Speicherplatz für <code>my_data</code> alloziert, schon wen ich den Funktionspointer abspeichere oder erst wenn ich die Funktion aufrufe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494703</guid><dc:creator><![CDATA[someone_]]></dc:creator><pubDate>Mon, 02 May 2016 09:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 09:48:14 GMT]]></title><description><![CDATA[<p>Nicht-null (0x00) initialisierte statische Variablen kommen in das .data Segment des Programmes IIRC. Speicherplatz ist also im Vorhinein schon reserviert. Initialisierung (= Konstruktoraufruf) geschieht aber erst beim ersten Aufruf deiner Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494705</guid><dc:creator><![CDATA[Singender Holzkübel]]></dc:creator><pubDate>Mon, 02 May 2016 09:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 09:48:23 GMT]]></title><description><![CDATA[<p>Der Speicher wird in der globals-Sektion des Executables reserviert (jedenfalls auf gängigen Systemen), der beim Programmstart in den RAM kopiert wird. Die Konstruktoren werden allerdings erst beim ersten Aufruf der Funktion durchlaufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494706</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 02 May 2016 09:48:23 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 09:56:36 GMT]]></title><description><![CDATA[<p>ich habs mal unter linux durchlaufen lassen:</p>
<pre><code>std::cout &lt;&lt; sizeof(data) &lt;&lt; std::endl;

Ausgabe: 48 byte.
</code></pre>
<p>Das heißt dafür werden 48 byte im data segment reserviert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494707</guid><dc:creator><![CDATA[someone_]]></dc:creator><pubDate>Mon, 02 May 2016 09:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 11:15:58 GMT]]></title><description><![CDATA[<p>someone_ schrieb:</p>
<blockquote>
<p>Das heißt dafür werden 48 byte im data segment reserviert?</p>
</blockquote>
<p>Wofür? data ist bei dir der Bezeichner für eine Klasse von Daten. Instanzierungen dieser Klasse, sofern es welche gibt, würden 48 Byte in dem entsprechenden Bereich belegen. Der Bezeichner &quot;data&quot; selbst existiert zur Laufzeit gar nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494712</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 02 May 2016 11:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 11:35:36 GMT]]></title><description><![CDATA[<p>okay, dann meine nächste Frage, wieviel Speicher wird reserviert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494713</guid><dc:creator><![CDATA[someone_]]></dc:creator><pubDate>Mon, 02 May 2016 11:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 12:48:01 GMT]]></title><description><![CDATA[<p>SeppJ hat die Frage nicht im Kontext des Eingangspostings beantwortet. Für die Ausgabe der Größe mit sizeof wird natürlich kein Speicher reserviert.</p>
<p>Im Programm aus dem Eingangsposting werden 48 Bytes in der data-Section (oder wie auch immer das auf der entsprechenden Plattform heisst) des Executables reserviert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494716</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 02 May 2016 12:48:01 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 12:54:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a><br />
das hast du falsch verstanden. Natürlich wird bei der sizeof expression kein speicher irgendwo reserviert.<br />
Ich meinte im data segment, wird sizeof(data) bytes reserviert.</p>
<p>Wenn das der Fall ist, sollte folgende code speicher effizienter sein:</p>
<pre><code>#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct data
{
    std::vector&lt;int&gt; vec1;
    std::vector&lt;int&gt; vec2;
    std::vector&lt;int&gt; vec3;
    std::vector&lt;int&gt; vec4;
};

struct foo
{
    static data&amp; get_data()
    {
    	static std::unique_ptr&lt;data&gt; obj = std::make_unique&lt;data&gt;();
    	return *obj.get();
    }
};

int main()
{
    auto func = &amp;foo::get_data;
    std::cout &lt;&lt; sizeof(data) &lt;&lt; std::endl;
    std::cout &lt;&lt; sizeof(std::unique_ptr&lt;data&gt;) &lt;&lt; std::endl;

    return 0;
}
</code></pre>
<p>Sollte wohl genauso noch thread safe sein, wie der erste code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494718</guid><dc:creator><![CDATA[someone_]]></dc:creator><pubDate>Mon, 02 May 2016 12:54:18 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 14:11:50 GMT]]></title><description><![CDATA[<p>Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494724</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Mon, 02 May 2016 14:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 15:15:15 GMT]]></title><description><![CDATA[<p>Weil der speicher für die variable <code>obj</code> nur 4, bzw. 8 byte groß ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494730</guid><dc:creator><![CDATA[someone_]]></dc:creator><pubDate>Mon, 02 May 2016 15:15:15 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 15:28:50 GMT]]></title><description><![CDATA[<p>someone_ schrieb:</p>
<blockquote>
<p>Weil der speicher für die variable <code>obj</code> nur 4, bzw. 8 byte groß ist?</p>
</blockquote>
<p>Und für das data-Objekt fällt keiner mehr an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494731</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 02 May 2016 15:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 18:00:52 GMT]]></title><description><![CDATA[<p>Du hast es erfasst, korrekt.</p>
<p>Im pointer fall wird nur der speicher für den unique_ptr reserviert nicht für data. Erst wenn ich die Funktion get_data() aufrufe, wird speicher dafür verbraucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494741</guid><dc:creator><![CDATA[someone_]]></dc:creator><pubDate>Mon, 02 May 2016 18:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Mon, 02 May 2016 18:02:07 GMT]]></title><description><![CDATA[<p>Achso, und der Vorteil liegt quasi auf der Hand, ich verstehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494742</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Mon, 02 May 2016 18:02:07 GMT</pubDate></item><item><title><![CDATA[Reply to Static Function - werden daten alloziert oder nicht? on Tue, 03 May 2016 05:21:05 GMT]]></title><description><![CDATA[<p>Wenn die Funktion natürlich nie aufgerufen wird und Dir 48 Bytes das Genick brechen, dann ist der letzte Code natürlich hypereffizient. Noch effizienter wäre dann natürlich, die Funktion ganz weg zu lassen *hust*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2494767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2494767</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 03 May 2016 05:21:05 GMT</pubDate></item></channel></rss>