<?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[Größe von Referenzen und Zeigern]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich arbeite jetzt schon längere Zeit mit Zeigern und Referenzen. Jedoch weis ich nicht genau wie groß sie sind. Kann mir da einer genaue Zahlen nennen? Eine Integer Variable ist im Normalfall beispielsweise 4 Byte groß.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182661/größe-von-referenzen-und-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:22:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182661.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 May 2007 20:29:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Sun, 27 May 2007 20:29:27 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich arbeite jetzt schon längere Zeit mit Zeigern und Referenzen. Jedoch weis ich nicht genau wie groß sie sind. Kann mir da einer genaue Zahlen nennen? Eine Integer Variable ist im Normalfall beispielsweise 4 Byte groß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293366</guid><dc:creator><![CDATA[webmaster1987]]></dc:creator><pubDate>Sun, 27 May 2007 20:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Sun, 27 May 2007 20:34:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int var;

int* ptr = &amp;var;
int&amp; ref = var;

cout &lt;&lt; &quot;int-Pointer hat eine Größe von: &quot; &lt;&lt; sizeof(ptr) &lt;&lt; endl;
cout &lt;&lt; &quot;int-Referenz hat eine Größe von: &quot; &lt;&lt; sizeof(ref) &lt;&lt; endl;
</code></pre>
<p>Diese Werte werden wohl bei den meisten Zeigern gleich sein auf deinem System. Allerdings können spezielle Zeiger (z.B. auf auf Methoden von Klassen) ganz andere Größen haben - und das je nach Compiler. Am besten du verlässt dich hier nie auf eine fixe Größe <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>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293373</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 27 May 2007 20:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 06:53:06 GMT]]></title><description><![CDATA[<p>Referenzen belegen keinen eigenen Speicher, daher können sie auch gar keine Größe haben.</p>
<p>SideWinder schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int var;

int* ptr = &amp;var;
int&amp; ref = var;
cout &lt;&lt; &quot;int-Referenz hat eine Größe von: &quot; &lt;&lt; sizeof(ref) &lt;&lt; endl;
</code></pre>
</blockquote>
<p>Diese Ausgabe gibt eher die sizeof von var aus, nicht aber die sizeof der Referenz...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293460</guid><dc:creator><![CDATA[iska]]></dc:creator><pubDate>Mon, 28 May 2007 06:53:06 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 07:41:34 GMT]]></title><description><![CDATA[<p>referenz ist so gross wie ein ptr. beide in den allermeisten faellen 4 oder 8byte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293470</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 28 May 2007 07:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 10:02:26 GMT]]></title><description><![CDATA[<p>Nein, Referenzen belegen keinen eigenen Speicher. Außer der Compiler kriegt das nicht besser hin. (was man nicht ausschliessen kann, aber normalerweise sollte es funktionieren) Referenzen sind nur ALIASE einer Variable! Kann man in jedem guten C++-Buch und auch in Bjarne Stroustrups Buch nachlesen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
using namespace std;

	int var; 

	int* ptr = &amp;var; 
	int&amp; ref = var; 

	cout &lt;&lt; &quot;int-Pointer hat eine Größe von: &quot; &lt;&lt; sizeof(ptr) &lt;&lt; endl; 
	cout &lt;&lt; &quot;int-Referenz hat eine Größe von: &quot; &lt;&lt; sizeof(ref) &lt;&lt; endl;
	cout &lt;&lt; &quot;Adresse von var &quot; &lt;&lt; &amp;var &lt;&lt; &quot; und ref &quot; &lt;&lt; &amp;ref &lt;&lt; endl;
}
</code></pre>
<p>Ergebnis:</p>
<pre><code>int-Pointer hat eine Größe von: 4
int-Referenz hat eine Größe von: 4
Adresse von var 0013FF64 und ref 0013FF64
</code></pre>
<p>Compiler: MSVC8.0<br />
var und ref sind ein und das selbe. Also nur einmal 4 byte verbraten und nicht zweimal 4 byte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293559</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 28 May 2007 10:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 10:24:23 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Nein, Referenzen belegen keinen eigenen Speicher.</p>
</blockquote>
<p>wie kann dann das sein:</p>
<pre><code class="language-cpp">class CFoo
{
private:
	int&amp;		m_Ref0;
	int&amp;		m_Ref1;
	int&amp;		m_Ref2;
	int&amp;		m_Ref3;
public:
					CFoo():
					m_Ref0(*new int),
					m_Ref1(*new int),
					m_Ref2(*new int),
					m_Ref3(*new int)
					{}
};
void RefTest()
{
	CFoo Bla;
	const int a=sizeof(Bla);//a==16
}
</code></pre>
<p>und wie sollten zur compiletime diese referenzen aufgeloest werden?</p>
<blockquote>
<p>Referenzen sind nur ALIASE einer Variable!</p>
</blockquote>
<p>sinnlich ja, technisch sind es pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293581</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 28 May 2007 10:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 10:27:46 GMT]]></title><description><![CDATA[<p>Vielen dank, ich wollte bei den ganzen Übergabeparametern mal wissen wie effektiv das ganze funktioniert, beispielsweise ist ein / eine Zeiger / Referenz auf eine normale integer Zahl dann genau so groß wie die Daten an sich, lohnt sich also nicht unbedingt in diesem Fall Zeiger / Referenzen zu benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293587</guid><dc:creator><![CDATA[webmaster1987]]></dc:creator><pubDate>Mon, 28 May 2007 10:27:46 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 10:34:34 GMT]]></title><description><![CDATA[<p>webmaster1987 schrieb:</p>
<blockquote>
<p>Vielen dank, ich wollte bei den ganzen Übergabeparametern mal wissen wie effektiv das ganze funktioniert, beispielsweise ist ein / eine Zeiger / Referenz auf eine normale integer Zahl dann genau so groß wie die Daten an sich, lohnt sich also nicht unbedingt in diesem Fall Zeiger / Referenzen zu benutzen.</p>
</blockquote>
<p>ja das stimmt, alle mit 4 (bzw <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> bytes, sofern man es sonst als const-ref uebergeben wuerde, sollte man eher by value uebergeben, das hilft dem compiler auch sehr beim optimieren weil viele aliasing-annahmen wegfallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293592</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 28 May 2007 10:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 10:56:40 GMT]]></title><description><![CDATA[<p>webmaster1987 schrieb:</p>
<blockquote>
<p>Vielen dank, ich wollte bei den ganzen Übergabeparametern mal wissen wie effektiv das ganze funktioniert, beispielsweise ist ein / eine Zeiger / Referenz auf eine normale integer Zahl dann genau so groß wie die Daten an sich, lohnt sich also nicht unbedingt in diesem Fall Zeiger / Referenzen zu benutzen.</p>
</blockquote>
<p>Ist das nicht eher eine Stilfrage, als eine Frage der Performance? Wieso sollte man Zeiger auf Variablen oder Objekte übergeben, wenn man nur Information und an den Daten ohnehin nichts verändern will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293612</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 28 May 2007 10:56:40 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 11:17:50 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p>Nein, Referenzen belegen keinen eigenen Speicher.</p>
</blockquote>
<p>wie kann dann das sein:</p>
<pre><code class="language-cpp">class CFoo
{
private:
	int&amp;		m_Ref0;
	int&amp;		m_Ref1;
	int&amp;		m_Ref2;
	int&amp;		m_Ref3;
public:
					CFoo():
					m_Ref0(*new int),
					m_Ref1(*new int),
					m_Ref2(*new int),
					m_Ref3(*new int)
					{}
};
void RefTest()
{
	CFoo Bla;
	const int a=sizeof(Bla);//a==16
}
</code></pre>
<p>und wie sollten zur compiletime diese referenzen aufgeloest werden?</p>
<blockquote>
<p>Referenzen sind nur ALIASE einer Variable!</p>
</blockquote>
<p>sinnlich ja, technisch sind es pointer.</p>
</blockquote>
<p>Deine Referenzen sind auch hier nur Aliase auf unbenannte Objekte. Das heißt wenn Refernzen EIGENEN Speicher belegen würden, dann hättest du einmal in deinem Code den Speicher für new int und einmal den Speicher für die Referenz, dem ist aber nicht so.</p>
<p>Ich stelle mir ne Refernz im Speicher immer so vor:</p>
<pre><code class="language-cpp">int zahl = 5;
/*Speicher
 ---------------
|zahl || 5      |
 ---------------
*/

int &amp;ref = zahl;
/*Speicher
 ---------------------
|zahl / ref || 5      |
 --------------------
*/
</code></pre>
<p>Dh die Refernez refernziert nur zusätzlich die Speicherstelle von zahl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293630</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 28 May 2007 11:17:50 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 11:20:34 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>webmaster1987 schrieb:</p>
<blockquote>
<p>Vielen dank, ich wollte bei den ganzen Übergabeparametern mal wissen wie effektiv das ganze funktioniert, beispielsweise ist ein / eine Zeiger / Referenz auf eine normale integer Zahl dann genau so groß wie die Daten an sich, lohnt sich also nicht unbedingt in diesem Fall Zeiger / Referenzen zu benutzen.</p>
</blockquote>
<p>Ist das nicht eher eine Stilfrage, als eine Frage der Performance? Wieso sollte man Zeiger auf Variablen oder Objekte übergeben, wenn man nur Information und an den Daten ohnehin nichts verändern will?</p>
</blockquote>
<p>Bei POD's ist das schon eher ne Stil-/Designfrage. Bei Klassen, dh größeren Objekten, spart man sich so die Kopie der Daten, somit auch den Aufruf von den ganzen C'tors und D'tors ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293633</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 28 May 2007 11:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 11:49:27 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>TravisG schrieb:</p>
<blockquote>
<p>webmaster1987 schrieb:</p>
<blockquote>
<p>Vielen dank, ich wollte bei den ganzen Übergabeparametern mal wissen wie effektiv das ganze funktioniert, beispielsweise ist ein / eine Zeiger / Referenz auf eine normale integer Zahl dann genau so groß wie die Daten an sich, lohnt sich also nicht unbedingt in diesem Fall Zeiger / Referenzen zu benutzen.</p>
</blockquote>
<p>Ist das nicht eher eine Stilfrage, als eine Frage der Performance? Wieso sollte man Zeiger auf Variablen oder Objekte übergeben, wenn man nur Information und an den Daten ohnehin nichts verändern will?</p>
</blockquote>
<p>Bei POD's ist das schon eher ne Stil-/Designfrage. Bei Klassen, dh größeren Objekten, spart man sich so die Kopie der Daten, somit auch den Aufruf von den ganzen C'tors und D'tors ...</p>
</blockquote>
<p>Sollte man deshalb im Sicherheitsbereich rumpfuschen? Bei Klassen verwendet man doch Zeiger auch nur nach dem Beispiel</p>
<pre><code class="language-cpp">void zeigmirgeldan(kundenkonto *kunde)
{
}
</code></pre>
<p>Hierbei werden keine Kopien übergeben, weil meistens C'tors irgendwelche Werte zurücksetzen oder sachen verfälschen, und nicht deshalb, weil man Performance sparen will, oder seh ich das falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293666</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 28 May 2007 11:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 11:52:15 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p>Nein, Referenzen belegen keinen eigenen Speicher.</p>
</blockquote>
<p>wie kann dann das sein:</p>
<pre><code class="language-cpp">...
</code></pre>
<p>und wie sollten zur compiletime diese referenzen aufgeloest werden?</p>
<blockquote>
<p>Referenzen sind nur ALIASE einer Variable!</p>
</blockquote>
<p>sinnlich ja, technisch sind es pointer.</p>
</blockquote>
<p>Es wurde doch angemert, das es Fälle gibt, in denen Referenzen doch wie Zeiger implementiert werden (müssen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293671</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Mon, 28 May 2007 11:52:15 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:04:12 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p>Nein, Referenzen belegen keinen eigenen Speicher.</p>
</blockquote>
<p>wie kann dann das sein:</p>
<pre><code class="language-cpp">class CFoo
{
private:
	int&amp;		m_Ref0;
	int&amp;		m_Ref1;
	int&amp;		m_Ref2;
	int&amp;		m_Ref3;
public:
					CFoo():
					m_Ref0(*new int),
					m_Ref1(*new int),
					m_Ref2(*new int),
					m_Ref3(*new int)
					{}
};
void RefTest()
{
	CFoo Bla;
	const int a=sizeof(Bla);//a==16
}
</code></pre>
<p>und wie sollten zur compiletime diese referenzen aufgeloest werden?</p>
<blockquote>
<p>Referenzen sind nur ALIASE einer Variable!</p>
</blockquote>
<p>sinnlich ja, technisch sind es pointer.</p>
</blockquote>
<p>m_Ref1 etc. zeigen auf &quot;*new int&quot;! Natürlich ergibt das dann 16! Die 16 Bytes sind die &quot;*new int&quot;! Aber die Bytes LIEGEN außerhalb der CFoo-Instanz. Lass dir mal die Adressen von den Referenzen ausgeben. Dann wirst du das selber erkennen.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class CFoo 
{ 
private: 
    int&amp; m_Ref0; 
    int* m_Ptr0;
    int  m_int;
public: 
    CFoo(int &amp;i): m_Ref0(i), m_Ptr0(&amp;i) 
    {
       cout &lt;&lt; &quot;Addr von CFoo: &quot; &lt;&lt; this &lt;&lt; endl;
       cout &lt;&lt; &quot;Addr von CFoo.m_Ref0: &quot; &lt;&lt; &amp;(this-&gt;m_Ref0) &lt;&lt; endl;
       cout &lt;&lt; &quot;Addr von CFoo.m_Ptr0: &quot; &lt;&lt; &amp;(this-&gt;m_Ptr0) &lt;&lt; endl;
       cout &lt;&lt; &quot;Addr von CFoo.m_int: &quot; &lt;&lt; &amp;(this-&gt;m_int) &lt;&lt; endl;
    } 
}; 

int main()
{
	int myInt;
	cout &lt;&lt; &quot;Addr von myInt&quot; &lt;&lt; &amp;myInt &lt;&lt; endl;
	CFoo Bla(myInt); 
}
</code></pre>
<p>Ergebnis (wichtig sind die Adressenvergleiche!):</p>
<pre><code>Addr von myInt 0013FF60
Addr von CFoo: 0013FF64
Addr von CFoo.m_Ref0: 0013FF60
Addr von CFoo.m_Ptr0: 0013FF68
Addr von CFoo.m_int: 0013FF6C
</code></pre>
<p>Die Adresse von m_Ref0 ist die von myInt! Das ist der entscheidende Punkt. Wäre m_Ref0 ein Pointer, hätte der Pointer eine andere Adresse. Hat er aber nicht. Weil m_Ref0 keine eigenständige Variable ist. Aber ein Pointer ist eine eigenständige Variable. Schau dir m_Ref0 und myInt an! Und dann m_Ptr0 mit m_Ref0. Nach deiner Theorie, müsste m_Ref0 eine andere Adresse als myInt haben.</p>
<p>Deshalb meckert der Compiler auch, wenn du einer Referenz nicht gleich eine Variable übergibst. Weil von was sollte er dann ein Alias sein? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Meinst du nicht, das es Sinnfrei wäre, Referenzen einzuführen, wenn sie nur Pointer wären? Und wie gesagt, es kann sein, das ein Compiler Referenzen generell als als Pointer implementiert (was aber ein sehr schlechter Compiler wäre!). Vielleicht macht er das sogar nur in bestimmten Situationen/Konstellationen. Ist aber weit vom erdachten Sinn und würde wohl unter &quot;nicht optimal nach Standard&quot; fallen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1293674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293674</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 28 May 2007 12:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:07:30 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Ich stelle mir ne Refernz im Speicher immer so vor:</p>
<pre><code class="language-cpp">int zahl = 5;
/*Speicher
 ---------------
|zahl || 5      |
 ---------------
*/

int &amp;ref = zahl;
/*Speicher
 ---------------------
|zahl / ref || 5      |
 --------------------
*/
</code></pre>
<p>Dh die Refernez refernziert nur zusätzlich die Speicherstelle von zahl.</p>
</blockquote>
<p>Sehr gute darstellung! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Um es mal zu vervollständigen:</p>
<pre><code class="language-cpp">int *ptr = &amp;zahl;
/*Speicher
 ---------------------
| ptr       || zahl   |
 --------------------
*/
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1293685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293685</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 28 May 2007 12:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:44:57 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Deine Referenzen sind auch hier nur Aliase auf unbenannte Objekte. Das heißt wenn Refernzen EIGENEN Speicher belegen würden, dann hättest du einmal in deinem Code den Speicher für new int und einmal den Speicher für die Referenz, dem ist aber nicht so.</p>
</blockquote>
<p>die referenzen belegen eigenen speicher, wieso sonst sollte die klasse 16 bytes haben? mit new hast du sicher keinen speicher in der klasse allokiert, du kannst auch gerne folgendes im c-tor machen</p>
<pre><code class="language-cpp">CFoor(int* pData):
                    m_Ref0(*pData),
                    m_Ref1(*pData),
                    m_Ref2(*pData),
                    m_Ref3(*pData)
{
}
</code></pre>
<p>du weisst also nichtmal ob das nicht ein ptr auf z.b. ein array ist und alle referenzen &quot;zeigen&quot; auf das selbe objekt, trotzdem ist die klasse 16bytes gross. kompilierst du das mit 64bit (also 64bit ptr) ist die klasse 32bytes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293691</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 28 May 2007 12:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:11:10 GMT]]></title><description><![CDATA[<p>Helium schrieb:</p>
<blockquote>
<p>Es wurde doch angemert, das es Fälle gibt, in denen Referenzen doch wie Zeiger implementiert werden (müssen).</p>
</blockquote>
<p>sie werden immer wie zeiger implementiert und wenn moeglich dann wegoptimiert, das passiert dir auch bei zeigern die &quot;unnuetz&quot; lokal auf ein objekt zeigen (und du keine zeigerarithmetik machst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293694</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 28 May 2007 12:11:10 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:11:26 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>Hierbei werden keine Kopien übergeben, weil meistens C'tors irgendwelche Werte zurücksetzen oder sachen verfälschen</p>
</blockquote>
<p>Wie können C'tors irgendwelche Sachen zurücksetzen oder verfälschen die es noch gar nicht gibt <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="😉"
    /> Schließlich sind die C'tors der Beginn eines Objektlebens.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class Lo {
   std::string str;
 public:
      Lo() { }

};

void blub( Lo obj ) { }
void blaa(const Lo&amp; obj) { }

int main()
{
   Lo sum;
   blub(sum); // sum wir kopiert, Aufruf string() und CopyCtor-Lo
   blaa(sum); // kein Aufruf
} 
// Ja ich verwende lieber bla und blub und so, statt foo, bar etc.
</code></pre>
<p>Wie man sieht kann man sich so bei größeren Objekten jede Menge sparen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293695</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 28 May 2007 12:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:39:32 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>die referenzen belegen eigenen speicher, wieso sonst sollte die klasse 16 bytes haben? mit new hast du sicher keinen speicher in der klasse allokiert, du kannst auch gerne folgendes im c-tor machen</p>
</blockquote>
<p>Schau dir doch mal das erste Posting von Artchi auf dieser Seite an, da steht auch nochmal wieso es 16 Bytes hat ...</p>
<p>rapso schrieb:</p>
<blockquote>
<p>du weisst also nichtmal ob das nicht ein ptr auf z.b. ein array ist und alle referenzen &quot;zeigen&quot; auf das selbe objekt, trotzdem ist die klasse 16bytes gross.</p>
</blockquote>
<p>Ja klar ist die Klasse 16 Bytes groß. Sizeof versucht von allen Membern die größe zu erfahren, dabei trifft er auf die ganzen m_Ref's. Bei vier m_Ref's trifft er dreimal auf dein p_date und einmal auf dein *new int.</p>
<p>Edit-&gt;Regel: Benutze nie sizeof, wenn Refernzen im Spiel sind ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293707</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 28 May 2007 12:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:28:14 GMT]]></title><description><![CDATA[<p>Standard: <a href="http://www.kuzbass.ru:8086/docs/isocpp/decl.html#dcl.ref" rel="nofollow">http://www.kuzbass.ru:8086/docs/isocpp/decl.html#dcl.ref</a> - Punkt 3 schrieb:</p>
<blockquote>
<p>It is unspecified whether or not a reference requires storage</p>
</blockquote>
<p>Somit ist wohl die Dikussion beenden <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="😉"
    /><br />
( Ich bin trotzdem dafür das 99% der Compiler für Referenzen keinen eigenen Speicher bereitstellen <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="😃"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293721</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 28 May 2007 12:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:48:46 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>webmaster1987 schrieb:</p>
<blockquote>
<p>Vielen dank, ich wollte bei den ganzen Übergabeparametern mal wissen wie effektiv das ganze funktioniert, beispielsweise ist ein / eine Zeiger / Referenz auf eine normale integer Zahl dann genau so groß wie die Daten an sich, lohnt sich also nicht unbedingt in diesem Fall Zeiger / Referenzen zu benutzen.</p>
</blockquote>
<p>Ist das nicht eher eine Stilfrage, als eine Frage der Performance? Wieso sollte man Zeiger auf Variablen oder Objekte übergeben, wenn man nur Information und an den Daten ohnehin nichts verändern will?</p>
</blockquote>
<p>Ich denke schon wenn man große Objekte übergeben will vergrößert man den benötigten Speicher um die Größe des Objekts ansonsten nur um diese 4 Byte pro Zeiger / Referenz. Dadurch kann man viel einfacher kalkulieren wie viel Speicher das Programm später braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293736</guid><dc:creator><![CDATA[webmaster1987]]></dc:creator><pubDate>Mon, 28 May 2007 12:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 12:59:57 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>du weisst also nichtmal ob das nicht ein ptr auf z.b. ein array ist und alle referenzen &quot;zeigen&quot; auf das selbe objekt, trotzdem ist die klasse 16bytes gross.</p>
</blockquote>
<p>Ja klar ist die Klasse 16 Bytes groß. Sizeof versucht von allen Membern die größe zu erfahren, dabei trifft er auf die ganzen m_Ref's. Bei vier m_Ref's trifft er dreimal auf dein p_date und einmal auf dein *new int.</p>
<p>Edit-&gt;Regel: Benutze nie sizeof, wenn Refernzen im Spiel sind ...</p>
</blockquote>
<p>dann ueberlade new und allokier CFoo mit new, es werden 16bytes gebraucht, eben weil die references genau wie pointer behandelt werden, denn sie sind auch nicht mehr als beschnittene ptr. da zu diesem zeitpunkt der ctor noch nicht aufgerufen wuerde, kannst du auch nichts an objektinformationen haben, die 4byte/ref sind immer (bei 32bit) vorhanden.</p>
<p>zur not schau dir das mal mit ptr und mal mit ref in assembler an, in jeder kombination die du willst, es wird der selbe code generiert werden. ob ref oder ptr ist fuer den compiler genau so irrelevant fuer den code wie const/nicht sonst, das ist nur abstrakte sprach-syntax<br />
sowas wie</p>
<pre><code class="language-cpp">char bla;
char* pFoo=&amp;bla;
*pFoo = 0;
</code></pre>
<p>wird genau so auf nur 1byte wegoptimiert wie es bei references waere.</p>
<p>und falls du auch mal lust hast zu sehen worauf die references zeigen, einfach</p>
<pre><code class="language-cpp">class CFoo
{
private:
	union
	{
		struct  
		{
			int&amp;		m_Ref0;
			int&amp;		m_Ref1;
			int&amp;		m_Ref2;
			int&amp;		m_Ref3;
		};
		struct  
		{
			int*		m_Ptr0;
			int*		m_Ptr1;
			int*		m_Ptr2;
			int*		m_Ptr3;
		};
	};
public:
					CFoo(int* pData):
					m_Ref0(*pData),
					m_Ref1(*pData),
					m_Ref2(*pData),
					m_Ref3(*pData)
					{
m_Ptr0=0;
                                        }
};
</code></pre>
<p>ausprobieren, da kannst du auch ne reference auf 0 setzen... klar ne sprachvergewaltigung, aber auch der beweis dass references nur ptr sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293745</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 28 May 2007 12:59:57 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 13:05:10 GMT]]></title><description><![CDATA[<p>so wie ich C++ einschätze, ist 'sizeof' mit referenzen undefiniert <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1293747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293747</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Mon, 28 May 2007 13:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Mon, 28 May 2007 13:09:23 GMT]]></title><description><![CDATA[<p>Ich zitiere mich nochmal selbst:</p>
<p>KasF schrieb:</p>
<blockquote>
<p>Standard: <a href="http://www.kuzbass.ru:8086/docs/isocpp/decl.html#dcl.ref" rel="nofollow">http://www.kuzbass.ru:8086/docs/isocpp/decl.html#dcl.ref</a> - Punkt 3 schrieb:</p>
<blockquote>
<p>It is unspecified whether or not a reference requires storage</p>
</blockquote>
<p>Somit ist wohl die Dikussion beenden <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>
</blockquote>
<p>Wenn es nicht definiert ist ob eine Refernz Speicher oder keinen Speicher belegt, dann ist wie pale dog auch schon sage, sizeof() auf Refernzen undefiniert.</p>
<p>Also brauchen wir hier doch gar nicht weiter darüber diskutieren, ob sie nun Speicher belegen oder nicht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1293753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1293753</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 28 May 2007 13:09:23 GMT</pubDate></item><item><title><![CDATA[Reply to Größe von Referenzen und Zeigern on Tue, 29 May 2007 07:07:28 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>was vermutlich zu der Verwirrung beiträgt, ist die Verkürzung von &quot;Eine Referenz besitzt keine eigene Adresse und sie kann ohne eigenen Speicherverbrauch implementiert werden&quot; zu &quot;Eine Referenz hat keinen Speicher&quot;...<br />
Letzteres ist eine nette Eselsbrücke für verschiedene Eigenschaften von Referenzen, aber eben auch kein &quot;Spez-Gesetz&quot;. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1294198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294198</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 29 May 2007 07:07:28 GMT</pubDate></item></channel></rss>