<?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[Pointer, Objekte, Speicherdarstellung]]></title><description><![CDATA[<p>hi,</p>
<p>hab n paar Fragen zum casten von Pointern, und Darstellung von Objekten im Speicher.</p>
<p>Erstmal zu dem Pointern:<br />
Hab jetzt durch rumprobieren herausgefunden, dass bei nem cast von int* auf char* der char Pointer auf die letzte Speicherstelle des ints zeigt</p>
<p>Int im Speicher</p>
<pre><code>+----+----+----+----+
|  20|  21|  22|  23|   Adresse
+----+----+----+----+
</code></pre>
<p>Also würde hier der Zeiger die Adresse 23 sein, und nicht 20?</p>
<p>Wie verhält sich das bei Objekten, bzw Strukturen? Genauso oder wird zB auf das letzte Byte des 1. Elements gezeigt?</p>
<p>Zu den Objekten:<br />
Wie genau werden Objecte im Speicher abgelegt?<br />
Ein Prog in meiner Uni meinte es weren alle Attribute gespeichert und ein pointer auf jeden Funktion + die Basisklasse</p>
<p>zB</p>
<pre><code>int                 4 Byte   Adresse 20
long long           8 Byte   Adresse 24
Ptr Funktion 1      4 Byte   Adresse 32
Ptr Funktion 2      4 Byte   Adresse 36
Ptr Konstruktor     4 Byte   Adresse 40
Ptr Destruktor      4 Byte   Adresse 44
</code></pre>
<p>Also 28 Bytes im Speicher für jedes Objekt<br />
Ein Zeiger auf das Objekt würde dann auf Adresse 23 zeigen (1. Element im speicher hier mit 4 Byte)?</p>
<p>Als ich aber von einer TestKlasse (siehe unten), kahm bei sizeof beide male 4 (Bytes) heraus, also nehme ich mal an, das is der int?<br />
Die Adresse auf eine Methode war 1 (&amp;TestKlasse::Methode1 oder &amp;TestKlasse::Methode2 beidemale 1) oO<br />
Soweit ich gelesen hab gibt die Adresse auf eine Methode den Abstand in Bytes vom Anfang des Objekts auf die Methode</p>
<p>TestKlasse:</p>
<pre><code class="language-cpp">class TestKlasse
{
private:
	int i;
public:
	TestKlasse(int zahl) {
		this-&gt;i = zahl;	}
	void Methode1() {
		cout &lt;&lt; &quot;Methode 1: &quot; &lt;&lt; i &lt;&lt; endl; }
	void Methode2() {
		cout &lt;&lt; &quot;Methode 2: &quot; &lt;&lt; i+1 &lt;&lt; endl; }
};

int main(void)
{
	TestKlasse tk(5);
	cout &lt;&lt; &quot;TestKlasse:&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;  sizeof  : &quot; &lt;&lt; sizeof(tk) &lt;&lt; endl;
	cout &lt;&lt; &quot;  methode1: &quot; &lt;&lt; &amp;TestKlasse::Methode1 &lt;&lt; endl;
	cout &lt;&lt; &quot;  methode2: &quot; &lt;&lt; &amp;TestKlasse::Methode2 &lt;&lt; endl;
}
</code></pre>
<p>wäre super wenn mir jemand sagen könnte wie das so ist,<br />
oder wüsste wo man sowas anchlesen kann</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261782/pointer-objekte-speicherdarstellung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 04:31:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261782.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Feb 2010 18:57:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer, Objekte, Speicherdarstellung on Tue, 23 Feb 2010 18:57:11 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>hab n paar Fragen zum casten von Pointern, und Darstellung von Objekten im Speicher.</p>
<p>Erstmal zu dem Pointern:<br />
Hab jetzt durch rumprobieren herausgefunden, dass bei nem cast von int* auf char* der char Pointer auf die letzte Speicherstelle des ints zeigt</p>
<p>Int im Speicher</p>
<pre><code>+----+----+----+----+
|  20|  21|  22|  23|   Adresse
+----+----+----+----+
</code></pre>
<p>Also würde hier der Zeiger die Adresse 23 sein, und nicht 20?</p>
<p>Wie verhält sich das bei Objekten, bzw Strukturen? Genauso oder wird zB auf das letzte Byte des 1. Elements gezeigt?</p>
<p>Zu den Objekten:<br />
Wie genau werden Objecte im Speicher abgelegt?<br />
Ein Prog in meiner Uni meinte es weren alle Attribute gespeichert und ein pointer auf jeden Funktion + die Basisklasse</p>
<p>zB</p>
<pre><code>int                 4 Byte   Adresse 20
long long           8 Byte   Adresse 24
Ptr Funktion 1      4 Byte   Adresse 32
Ptr Funktion 2      4 Byte   Adresse 36
Ptr Konstruktor     4 Byte   Adresse 40
Ptr Destruktor      4 Byte   Adresse 44
</code></pre>
<p>Also 28 Bytes im Speicher für jedes Objekt<br />
Ein Zeiger auf das Objekt würde dann auf Adresse 23 zeigen (1. Element im speicher hier mit 4 Byte)?</p>
<p>Als ich aber von einer TestKlasse (siehe unten), kahm bei sizeof beide male 4 (Bytes) heraus, also nehme ich mal an, das is der int?<br />
Die Adresse auf eine Methode war 1 (&amp;TestKlasse::Methode1 oder &amp;TestKlasse::Methode2 beidemale 1) oO<br />
Soweit ich gelesen hab gibt die Adresse auf eine Methode den Abstand in Bytes vom Anfang des Objekts auf die Methode</p>
<p>TestKlasse:</p>
<pre><code class="language-cpp">class TestKlasse
{
private:
	int i;
public:
	TestKlasse(int zahl) {
		this-&gt;i = zahl;	}
	void Methode1() {
		cout &lt;&lt; &quot;Methode 1: &quot; &lt;&lt; i &lt;&lt; endl; }
	void Methode2() {
		cout &lt;&lt; &quot;Methode 2: &quot; &lt;&lt; i+1 &lt;&lt; endl; }
};

int main(void)
{
	TestKlasse tk(5);
	cout &lt;&lt; &quot;TestKlasse:&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;  sizeof  : &quot; &lt;&lt; sizeof(tk) &lt;&lt; endl;
	cout &lt;&lt; &quot;  methode1: &quot; &lt;&lt; &amp;TestKlasse::Methode1 &lt;&lt; endl;
	cout &lt;&lt; &quot;  methode2: &quot; &lt;&lt; &amp;TestKlasse::Methode2 &lt;&lt; endl;
}
</code></pre>
<p>wäre super wenn mir jemand sagen könnte wie das so ist,<br />
oder wüsste wo man sowas anchlesen kann</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860251</guid><dc:creator><![CDATA[leb0rtran]]></dc:creator><pubDate>Tue, 23 Feb 2010 18:57:11 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer, Objekte, Speicherdarstellung on Tue, 23 Feb 2010 20:01:05 GMT]]></title><description><![CDATA[<p>leb0rtran schrieb:</p>
<blockquote>
<p>hi,</p>
<p>hab n paar Fragen zum casten von Pointern, und Darstellung von Objekten im Speicher.</p>
<p>Erstmal zu dem Pointern:<br />
Hab jetzt durch rumprobieren herausgefunden, dass bei nem cast von int* auf char* der char Pointer auf die letzte Speicherstelle des ints zeigt</p>
<p>Int im Speicher</p>
<pre><code>+----+----+----+----+
|  20|  21|  22|  23|   Adresse
+----+----+----+----+
</code></pre>
<p>Also würde hier der Zeiger die Adresse 23 sein, und nicht 20?</p>
</blockquote>
<p>ja char* zeigt, so weit ich weiß, immer auf das niedrigste Byte eines int.<br />
Welche Addresse das Byte hat ist von Prozessor abhängig -&gt; endianness</p>
<blockquote>
<p>Wie verhält sich das bei Objekten, bzw Strukturen? Genauso oder wird zB auf das letzte Byte des 1. Elements gezeigt?</p>
</blockquote>
<p>Der Pointer zeigt immer auf den Anfang.</p>
<blockquote>
<p>Zu den Objekten:<br />
Wie genau werden Objecte im Speicher abgelegt?<br />
Ein Prog in meiner Uni meinte es weren alle Attribute gespeichert und ein pointer auf jeden Funktion + die Basisklasse</p>
<p>zB</p>
<pre><code>int                 4 Byte   Adresse 20
long long           8 Byte   Adresse 24
Ptr Funktion 1      4 Byte   Adresse 32
Ptr Funktion 2      4 Byte   Adresse 36
Ptr Konstruktor     4 Byte   Adresse 40
Ptr Destruktor      4 Byte   Adresse 44
</code></pre>
<p>Also 28 Bytes im Speicher für jedes Objekt<br />
Ein Zeiger auf das Objekt würde dann auf Adresse 23 zeigen (1. Element im speicher hier mit 4 Byte)?</p>
<p>Als ich aber von einer TestKlasse (siehe unten), kahm bei sizeof beide male 4 (Bytes) heraus, also nehme ich mal an, das is der int?<br />
Die Adresse auf eine Methode war 1 (&amp;TestKlasse::Methode1 oder &amp;TestKlasse::Methode2 beidemale 1) oO<br />
Soweit ich gelesen hab gibt die Adresse auf eine Methode den Abstand in Bytes vom Anfang des Objekts auf die Methode</p>
<p>TestKlasse:</p>
<pre><code class="language-cpp">class TestKlasse
{
private:
	int i;
public:
	TestKlasse(int zahl) {
		this-&gt;i = zahl;	}
	void Methode1() {
		cout &lt;&lt; &quot;Methode 1: &quot; &lt;&lt; i &lt;&lt; endl; }
	void Methode2() {
		cout &lt;&lt; &quot;Methode 2: &quot; &lt;&lt; i+1 &lt;&lt; endl; }
};

int main(void)
{
	TestKlasse tk(5);
	cout &lt;&lt; &quot;TestKlasse:&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;  sizeof  : &quot; &lt;&lt; sizeof(tk) &lt;&lt; endl;
	cout &lt;&lt; &quot;  methode1: &quot; &lt;&lt; &amp;TestKlasse::Methode1 &lt;&lt; endl;
	cout &lt;&lt; &quot;  methode2: &quot; &lt;&lt; &amp;TestKlasse::Methode2 &lt;&lt; endl;
}
</code></pre>
<p>wäre super wenn mir jemand sagen könnte wie das so ist,<br />
oder wüsste wo man sowas anchlesen kann</p>
<p>mfg</p>
</blockquote>
<p>müsste alles implementierungsabhängig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860283</guid><dc:creator><![CDATA[irgendwer]]></dc:creator><pubDate>Tue, 23 Feb 2010 20:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer, Objekte, Speicherdarstellung on Tue, 23 Feb 2010 20:42:48 GMT]]></title><description><![CDATA[<p>Objekte speichern keine Pointer auf ihre Memberfunktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860298</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 23 Feb 2010 20:42:48 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer, Objekte, Speicherdarstellung on Tue, 23 Feb 2010 20:56:15 GMT]]></title><description><![CDATA[<p>Sondern übergeben ihren Methoden den impliziten this Zeiger auf den Anfang ihrer Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860303</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Tue, 23 Feb 2010 20:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer, Objekte, Speicherdarstellung on Tue, 23 Feb 2010 22:37:05 GMT]]></title><description><![CDATA[<p>irgendwer schrieb:</p>
<blockquote>
<p>Der Pointer zeigt immer auf den Anfang.</p>
</blockquote>
<p>Aber auf was für einen Anfang? Auf das 1. Element generell, oder auf das 1.Byte des kompletten structs?</p>
<pre><code class="language-cpp">struct blaT {
  int bla;
  string xyz; };
</code></pre>
<p>Angenommen der struct is 10Byte lang und geht von Adresse 20 bis 29, ist der Zeiger dann 20 (der Anfang des structs von den Bytes aus gesehen) oder ist der Zeiger 23 (Zeiger zeigt auf das 1. Element, was ein int ist, und bei einem int zeigt der Zeiger auf das letzte Byte)<br />
Da muss es doch eine einheitliche Regel geben?</p>
<p>irgendwer schrieb:</p>
<blockquote>
<p>müsste alles implementierungsabhängig sein.</p>
</blockquote>
<p>OS bzw Compiler abhängig (oder gleich beides)?</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Objekte speichern keine Pointer auf ihre Memberfunktionen.</p>
</blockquote>
<p>blub² schrieb:</p>
<blockquote>
<p>Sondern übergeben ihren Methoden den impliziten this Zeiger auf den Anfang ihrer Daten.</p>
</blockquote>
<p>Also sieht das Objekt wie ein struct aus, also hier nur ein 4 Byte int</p>
<p>Was sagt mir dann die Ausgabe &quot;1&quot; von &amp;TestKlasse::Methode1 und bei &amp;TestKlasse::Methode2, sollte ja dann entweder 1 und 2 oder 4 und 8 (in Bytes, 4Byte der int, 4 Byte der Pointer auf Methode1 und 4 Byte für Methode2)</p>
<p><a href="http://www.math.uni-wuppertal.de/~axel/skripte/oop/oop12_5.html" rel="nofollow">http://www.math.uni-wuppertal.de/~axel/skripte/oop/oop12_5.html</a> schrieb:</p>
<blockquote>
<p>Vielmehr beschreiben sie (bei Pointern auf Datenmember) die Position des Members innerhalb der Klasse. Sie werden intern durch die Adreßdifferenz des Datenmembers zum Beginn des ganzen Objekts dargestellt</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1860346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860346</guid><dc:creator><![CDATA[leb0rtran]]></dc:creator><pubDate>Tue, 23 Feb 2010 22:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer, Objekte, Speicherdarstellung on Wed, 24 Feb 2010 00:06:34 GMT]]></title><description><![CDATA[<p>leb0rtran schrieb:</p>
<blockquote>
<p>Aber auf was für einen Anfang? Auf das 1. Element generell, oder auf das 1.Byte des kompletten structs?</p>
</blockquote>
<p>Im Allgemeinen schwer zu sagen, da es von vielen Dingen abhängen kann, dem Compiler, dem OS, ob grade ein Schaltjahr ist, usw.</p>
<p>Als Beispiel für diesen ganzen Kram die Zahl einhundertdreiundzwanzig<br />
nehmen wir an, der Prozessor speichert jede Ziffern an einer eigenen Speicheradresse ab und grundsätzlich nur Zahlen die aus vier Ziffern bestehen. Dabei gibt es zwei Möglichkeiten:<br />
1. Er speichert die Ziffer mit der niedrigsten Wertigkeit in der niedrigsten Addresse</p>
<pre><code>|0x1|0x2|0x3|0x4|
-----------------
| 3 | 2 | 1 | 0 |
</code></pre>
<p>2. Die Ziffer mit der höchsten Wertigkeit kommt in die niedrigste Addresse</p>
<pre><code>|0x1|0x2|0x3|0x4|
-----------------
| 0 | 1 | 2 | 3 |
</code></pre>
<p>Zum Glück weiß der Compiler, wie welcher Prozessor das macht.<br />
Problematisch wird es nur wenn du binäre Daten zwischen den beiden Systemen tauscht.</p>
<blockquote>
<p>Da muss es doch eine einheitliche Regel geben?</p>
</blockquote>
<p>Nicht wirklich, der Standard sagt nur, wie so oft, wie es formal auszusehen hat und das es funktionieren soll. Zudem darf der Compiler beliebig viele 0 Bytes einfügen, um optimale Größen zuerreichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860369</guid><dc:creator><![CDATA[irgendwer]]></dc:creator><pubDate>Wed, 24 Feb 2010 00:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer, Objekte, Speicherdarstellung on Wed, 24 Feb 2010 19:26:42 GMT]]></title><description><![CDATA[<p>ich bin doch irgendwer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860772</guid><dc:creator><![CDATA[irgendwer]]></dc:creator><pubDate>Wed, 24 Feb 2010 19:26:42 GMT</pubDate></item></channel></rss>