<?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[sizeof rundet?]]></title><description><![CDATA[<p>hallo,<br />
heute ist mir etwas seltsames bei der Verwendung von sizeof(..) aufgefallen:</p>
<pre><code class="language-cpp">class test
{
public:
	int   lala1[2];
	float lala2;
	char  lala3[24];
	float lala4[13];
	char  lala5[18];
};

sizeof(test) -&gt; 0x6C
</code></pre>
<p>soweit, sogut. Wenn ich aber die Klasse leicht abändere:</p>
<pre><code class="language-cpp">class test
{
public:
	int   lala1[2];
	float lala2;
	char  lala3[24];
	float lala4[13];
	char  lala5[17]; //&lt;---
};

sizeof(test) -&gt; 0x6C
</code></pre>
<p>Warum gibt sizeof immernoch 0x6C aus? Erst wenn ich Größenänderungen im 2 Byte Bereich mache, gibt sizeof einen neuen Wert aus. Allerdings auch dann noch falsch:</p>
<p>lala5[16] -&gt; 0x68 sollte doch erst bei [14] kommen?!</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241104/sizeof-rundet</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 16:50:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241104.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 May 2009 16:37:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 16:37:17 GMT]]></title><description><![CDATA[<p>hallo,<br />
heute ist mir etwas seltsames bei der Verwendung von sizeof(..) aufgefallen:</p>
<pre><code class="language-cpp">class test
{
public:
	int   lala1[2];
	float lala2;
	char  lala3[24];
	float lala4[13];
	char  lala5[18];
};

sizeof(test) -&gt; 0x6C
</code></pre>
<p>soweit, sogut. Wenn ich aber die Klasse leicht abändere:</p>
<pre><code class="language-cpp">class test
{
public:
	int   lala1[2];
	float lala2;
	char  lala3[24];
	float lala4[13];
	char  lala5[17]; //&lt;---
};

sizeof(test) -&gt; 0x6C
</code></pre>
<p>Warum gibt sizeof immernoch 0x6C aus? Erst wenn ich Größenänderungen im 2 Byte Bereich mache, gibt sizeof einen neuen Wert aus. Allerdings auch dann noch falsch:</p>
<p>lala5[16] -&gt; 0x68 sollte doch erst bei [14] kommen?!</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711140</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Fri, 15 May 2009 16:37:17 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 16:45:25 GMT]]></title><description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/Speicherausrichtung" rel="nofollow">http://de.wikipedia.org/wiki/Speicherausrichtung</a></p>
<p>2*4 + 4 + 24*1 + 13*4 + 18 = 106</p>
<p>In deinem Compiler ist wahrscheinlich ein 4 Byte-Alignment eingestellt, also wird auf das nächste Vielfache von 4 &quot;gerundet&quot;, also 108 = 0x6C.<br />
Wenn du jetzt 2 char (Byte) runter gehst passt du genau in ein Vielfaches von 4 104 = 0x68.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711150</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Fri, 15 May 2009 16:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 16:46:19 GMT]]></title><description><![CDATA[<p>Nicht sizeof rundet, sondern der Compiler fügt hier padding bytes ein.</p>
<p><a href="http://de.wikipedia.org/wiki/Padding" rel="nofollow">http://de.wikipedia.org/wiki/Padding</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711151</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 May 2009 16:46:19 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 16:58:46 GMT]]></title><description><![CDATA[<p>aber das ist doch total fehlerlastig, wenn ich das zB bei memcpy benutze oder?<br />
In einem Fall wird zuviel kopiert, im anderen zu wenig.</p>
<p>Edit: zu wenig kann ja gar nicht kopiert werden. Das Überschüssige ist also nur leer. Danke für die Aufklärung.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711152</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Fri, 15 May 2009 16:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 17:02:29 GMT]]></title><description><![CDATA[<p>KN4CK3R schrieb:</p>
<blockquote>
<p>aber das ist doch total fehlerlastig, wenn ich das zB bei memcpy benutze oder?</p>
</blockquote>
<p>Nein, es wird sicher genügend kopiert. Je nachdem halt Speicher, den du nicht verwendest.</p>
<p>In C++ solltest du mit <code>memcpy()</code> vorsichtig sein - angewendet auf Non-PODs kann es schnell einmal zu undefiniertem Verhalten führen. Benutze lieber die Kopiermöglichkeiten der Objektorientierung - Kopierkonstruktor für einzelne Objekte, <code>std::copy()</code> für Arrays oder Container.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711158</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 15 May 2009 17:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 18:51:05 GMT]]></title><description><![CDATA[<p>KN4CK3R schrieb:</p>
<blockquote>
<p>aber das ist doch total fehlerlastig, wenn ich das zB bei memcpy benutze oder?<br />
In einem Fall wird zuviel kopiert, im anderen zu wenig.</p>
<p>Edit: zu wenig kann ja gar nicht kopiert werden. Das Überschüssige ist also nur leer. Danke für die Aufklärung.</p>
<p>greetz KN4CK3R</p>
</blockquote>
<p>Bitte lies nach was Padding heisst/ist.<br />
Noch ein Wort dass du nachschlagen solltest: Alignment.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711220</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 15 May 2009 18:51:05 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 20:37:38 GMT]]></title><description><![CDATA[<p>rean schrieb:</p>
<blockquote>
<p>In deinem Compiler ist wahrscheinlich ein 4 Byte-Alignment eingestellt, also wird auf das nächste Vielfache von 4 &quot;gerundet&quot;, also 108 = 0x6C.</p>
</blockquote>
<p>Hallo,<br />
mit der Compilereinstellung hat das gar nicht so viel zu tun. Das erste Feld der Struktur ist ein int-Array, also muss die Struktur mindestens genauso ausgerichtet werden wie int.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711255</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 15 May 2009 20:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Fri, 15 May 2009 23:22:38 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>rean schrieb:</p>
<blockquote>
<p>In deinem Compiler ist wahrscheinlich ein 4 Byte-Alignment eingestellt, also wird auf das nächste Vielfache von 4 &quot;gerundet&quot;, also 108 = 0x6C.</p>
</blockquote>
<p>Hallo,<br />
mit der Compilereinstellung hat das gar nicht so viel zu tun. Das erste Feld der Struktur ist ein int-Array, also muss die Struktur mindestens genauso ausgerichtet werden wie int.</p>
</blockquote>
<p>Naja aber wer sagt dass int auf einer 4 Byte Grenze ausgerichtet werden muss? Hmmmm?<br />
Auf x86 (und x64) CPUs ist das nämlich schonmal nicht so.<br />
Eine &quot;int + char&quot; struct dürfte daher gerne 5 Byte haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711298</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 15 May 2009 23:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Sat, 16 May 2009 14:08:34 GMT]]></title><description><![CDATA[<p>Der Grund für die Ausrichtung von int sei mal dahingestellt (ich vermute, dass es deutlich performanter ist), aber der Grund für die Ausrichtung der Struktur lässt sich darauf zurückführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711462</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 16 May 2009 14:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof rundet? on Sat, 16 May 2009 15:11:57 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Der Grund für die Ausrichtung von int sei mal dahingestellt (ich vermute, dass es deutlich performanter ist), aber der Grund für die Ausrichtung der Struktur lässt sich darauf zurückführen.</p>
</blockquote>
<p>Ja, natürlich. Ich wollte nur darauf hinweisen dass es nicht so sein <em>muss</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711495</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 16 May 2009 15:11:57 GMT</pubDate></item></channel></rss>