<?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[strigs immer 32 bytes groß?]]></title><description><![CDATA[<p>Hallo ich habe eine Frage, ich bastel gerade mit Strings und mir ist aufgefallen dass ein String(string text = &quot;...&quot;) in C++ immer nur 32 bytes groß sind auch wenn dort 200 Zeichen drin stehen.<br />
Aber wie geht das? ich dachte ein string währe ein array aus Zeichen und der Computer müsste pro zeichen ein byte im RAM reservieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197690/strigs-immer-32-bytes-groß</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 12:04:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197690.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Nov 2007 16:33:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 16:33:14 GMT]]></title><description><![CDATA[<p>Hallo ich habe eine Frage, ich bastel gerade mit Strings und mir ist aufgefallen dass ein String(string text = &quot;...&quot;) in C++ immer nur 32 bytes groß sind auch wenn dort 200 Zeichen drin stehen.<br />
Aber wie geht das? ich dachte ein string währe ein array aus Zeichen und der Computer müsste pro zeichen ein byte im RAM reservieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402625</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Tue, 13 Nov 2007 16:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Wed, 14 Nov 2007 07:47:56 GMT]]></title><description><![CDATA[<p>kleines Beispiel:</p>
<pre><code class="language-cpp">struct MyString {
   char* internalPointer;
};

int main(int argc, char* argv[]) {
   MyString s;
   cout &lt;&lt; sizeof(s) &lt;&lt; &quot;\n&quot;;
   s.internalPointer = new char[100];
   cout &lt;&lt; sizeof(s) &lt;&lt; &quot;\n&quot;;
   delete[] s.internalPointer;
   cout &lt;&lt; sizeof(s) &lt;&lt; &quot;\n&quot;;
   s.internalPointer = new char[argc];
   cout &lt;&lt; sizeof(s) &lt;&lt; &quot;\n&quot;;
   delete[] s.internalPointer;
   return 0;
}
</code></pre>
<p>Na ... was wird wohl rauskommen ? <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>Gruß,</p>
<p>Simon2.</p>
<p>P.S. Kleiner Tipp: sizeof wird zur Compilezeit ausgwertet....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402631</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 14 Nov 2007 07:47:56 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 16:38:24 GMT]]></title><description><![CDATA[<p>std::string speichert seine Daten auf dem Heap, deswegen kann er dynamisch wachsen.</p>
<p>Was du meinst sin char-arrayys:</p>
<pre><code class="language-cpp">char c[] = &quot;Bla&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1402632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402632</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Tue, 13 Nov 2007 16:38:24 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 17:15:25 GMT]]></title><description><![CDATA[<p>Aber im Heap ist doch auch nicht ungebrenz Speicher verfügbar.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a> übrall 4 laut dos-fenter ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402658</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Tue, 13 Nov 2007 17:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 17:18:36 GMT]]></title><description><![CDATA[<p>Aber meist mehr als auf dem Stack.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402660</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Tue, 13 Nov 2007 17:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 17:27:05 GMT]]></title><description><![CDATA[<p>der Pointer ist lediglich 4 byte groß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402665</guid><dc:creator><![CDATA[crashterpiece]]></dc:creator><pubDate>Tue, 13 Nov 2007 17:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 17:27:48 GMT]]></title><description><![CDATA[<p>Du hast einen Pointer für einen String definiert, nicht mehr. Der ist für<br />
32-bit-Anwendungen nun einmal 32 bit lang. Willst du einen String-Array, so<br />
musst Du diesen als solchen deklarieren. Geht so, wie in der vorherigen Antwort.<br />
Kannst auch anders machen:<br />
char mystring[24]; // deklariert eine String für 24 Zeichen<br />
strcpy(mystring,&quot;blablabla&quot;); // füllt was rein<br />
Hinweis an C-Neulinge: Pointer sind wichtig, man sollte wissen was das ist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402666</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Tue, 13 Nov 2007 17:27:48 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 17:45:59 GMT]]></title><description><![CDATA[<p>Ja ich weiss was Pointer sind, die speichern die Adresse einer variable, aber um eine Speichern, muss es doch erstmal eine Variable geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402676</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Tue, 13 Nov 2007 17:45:59 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 18:34:16 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@simon</a>: delete [] ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402709</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 13 Nov 2007 18:34:16 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Tue, 13 Nov 2007 19:52:56 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>Ja ich weiss was Pointer sind, die speichern die Adresse einer variable, aber um eine Speichern, muss es doch erstmal eine Variable geben.</p>
</blockquote>
<p>Etwas genauer:</p>
<p>char* internalPointer;</p>
<p>Ist eine Variable vom Typ char-Pointer. Diese hat (wie auch dein Programm richtig meldet) 32 bit auf 32 Bit-Systemen. Dies ist wie gesagt bereits eine Variable und diese Variable selbst liegt auf dem Stack. Der Inhalt wiederum ist eine Adresse auf einen Speicherbereich auf dem Heap. Du bekommst mit sizeof aber nur mitgeteilt wie groß die Variable (dein Pointer) ist.</p>
<p>internalPointer (4 Bit) -&gt; Speicherbereich (z.b. dynamisch alloziert, internalPointer zeigt auf den Speicherbegin)</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402768</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 13 Nov 2007 19:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Wed, 14 Nov 2007 08:09:39 GMT]]></title><description><![CDATA[<p>lord_fritte schrieb:</p>
<blockquote>
<p>...@Simon2 übrall 4 laut dos-fenter ^^</p>
</blockquote>
<p>Eben ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
So ist's auch mit string: Die eigentlich &quot;Daten&quot; liegen nicht innerhalb des string-Objekts, sondern außerhalb.<br />
(EIN Grund, warum ich gegen &quot;direktes binäres Speichern&quot; von Objekten in Files bin)</p>
<p>(D)Evil schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@simon</a>: delete [] ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> ... hast natürlich Recht. Danke - hab's korrigiert.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1402877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1402877</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 14 Nov 2007 08:09:39 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Wed, 14 Nov 2007 13:56:19 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>internalPointer (4 Bit) -&gt; Speicherbereich (z.b. dynamisch alloziert, internalPointer zeigt auf den Speicherbegin)</p>
</blockquote>
<p>Hier wird schonwieder feste Bit mit Byte verwechselt. Ein Zeiger ist niemals 4 Bit gross, das würde bedeuten dass man 16 Byte addressieren kann, selbst ein VC20 hatte grössere Zeiger.</p>
<p>Und wenn ein String Objekt wirklich 32 Byte gross ist(sizeof(std::string)), dann deutet das darauf hin dass die String Klasse SSO (small string optimization) verwendet. Dabei werden kurze Strings direkt im Objekt selbst gespeichert, wodurch die dynamische Speicheranforderung eingespart wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403089</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 14 Nov 2007 13:56:19 GMT</pubDate></item><item><title><![CDATA[Reply to strigs immer 32 bytes groß? on Wed, 14 Nov 2007 14:00:21 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Hier wird schonwieder feste Bit mit Byte verwechselt.</p>
</blockquote>
<p>Sorry, muss ich im müden Zustand geschrieben haben ;p... Meinte Byte nicht Bit (Auch wenn ich zuhause tatsächlich ein System liegen habe das mit Nibbles [4 Bit] oder wie die heißen arbeitet, wenn auch nicht zur Adressierung).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403093</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 14 Nov 2007 14:00:21 GMT</pubDate></item></channel></rss>