<?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[Typ size_t beim Überschreiben von new]]></title><description><![CDATA[<p>Ich habe also new bei einer Klasse überschrieben. Soweit so gut. Nun meckert mich gcc voll das new einen Parameter vom Typ size_t (long unsigned int) erwartet und ich habe new mit nem Parameter vom Typ &quot;unsigned int&quot; deklariert.</p>
<p>Ich weiß das &quot;unsigned int&quot; auf 32bit Architekturen 4Byte groß ist und auf 64bit Architekturen 8Byte und das &quot;long unsigned int&quot; immer 4Byte groß ist.</p>
<p>Also da ich für 32bit kompiliere, dürfte er mir maximal ne Warnung geben, dass das Programm eventuell unter 64bit Probleme machen könnte, aber ich bekomme nen Error (clang sagt gar nichts dazu).<br />
Das nächste ist, wenn ich das mal als gegeben hinnehme (das new immer einen Parameter vom Typ &quot;long unsigned int&quot; bekommt) dann heißt das ja auch das auf einer 64bit Architektur keine Objekte größer 0xFFFFFFFF alloziert werden können. Was ich wiederrum nicht ganz verstehen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285501/typ-size_t-beim-überschreiben-von-new</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 06:58:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285501.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Apr 2011 19:33:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 19:50:17 GMT]]></title><description><![CDATA[<p>Ich habe also new bei einer Klasse überschrieben. Soweit so gut. Nun meckert mich gcc voll das new einen Parameter vom Typ size_t (long unsigned int) erwartet und ich habe new mit nem Parameter vom Typ &quot;unsigned int&quot; deklariert.</p>
<p>Ich weiß das &quot;unsigned int&quot; auf 32bit Architekturen 4Byte groß ist und auf 64bit Architekturen 8Byte und das &quot;long unsigned int&quot; immer 4Byte groß ist.</p>
<p>Also da ich für 32bit kompiliere, dürfte er mir maximal ne Warnung geben, dass das Programm eventuell unter 64bit Probleme machen könnte, aber ich bekomme nen Error (clang sagt gar nichts dazu).<br />
Das nächste ist, wenn ich das mal als gegeben hinnehme (das new immer einen Parameter vom Typ &quot;long unsigned int&quot; bekommt) dann heißt das ja auch das auf einer 64bit Architektur keine Objekte größer 0xFFFFFFFF alloziert werden können. Was ich wiederrum nicht ganz verstehen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052671</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Thu, 21 Apr 2011 19:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 19:41:14 GMT]]></title><description><![CDATA[<p>Selbst wenn die Typen gleich groß sind, kann der Compiler sie trotzdem unterscheiden. (und außerdem ist nicht garantiert, daß <code>unsigned long</code> immer 4 Byte groß ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052675</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Apr 2011 19:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 19:49:57 GMT]]></title><description><![CDATA[<p>Ich dachte das &quot;long unsigned int&quot; immer 4Byte groß ist!?</p>
<p>Was anderes, ist das nun ein &quot;unsigned long&quot; oder ein &quot;unsigned int&quot; und wenn es ein &quot;unsigned long&quot; ist, wozu dann das &quot;int&quot;?</p>
<p>Der Grund warum clang++ keine Fehlermeldung (und nicht mal ne Warnung) gbt, muss ja auch seinen Grund haben?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052682</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Thu, 21 Apr 2011 19:49:57 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 19:51:14 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p>Ich weiß das &quot;unsigned int&quot; auf 32bit Architekturen 4Byte groß ist und auf 64bit Architekturen 8Byte und das &quot;long unsigned int&quot; immer 4Byte groß ist.</p>
</blockquote>
<p>Ganz falsch.<br />
int ist immer 4 Byte.<br />
long 4 oder 8.<br />
(Außer man stellt es mit ungewöhlichen Compileroptionen um)</p>
<p>Also ist long meistens passend. size_t erst recht.<br />
Wenn Du size_t nicht nehmen willst, nimm</p>
<pre><code class="language-cpp">typedef decltype(sizeof(0)) Size;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2052684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052684</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 21 Apr 2011 19:51:14 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 19:54:20 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p>Ich dachte das &quot;long unsigned int&quot; immer 4Byte groß ist!?</p>
</blockquote>
<p>Nein, der Standard definiert nur Mindestgrößen für die Zahlentypen - der Compiler kann gerne größere Typen festlegen.<br />
(PS: und &quot;unsigned long&quot; ist eine Kurzschreibweise für &quot;unsigned long int&quot;, die aber so beliebt ist, daß kaum jemand die Langversion verwendet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052685</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Apr 2011 19:54:20 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 19:57:25 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Wenn Du size_t nicht nehmen willst, nimm</p>
<pre><code class="language-cpp">typedef decltype(sizeof(0)) Size;
</code></pre>
</blockquote>
<p>Das <strong>ist</strong> size_t <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052686</guid><dc:creator><![CDATA[Du bist was du misst]]></dc:creator><pubDate>Thu, 21 Apr 2011 19:57:25 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 20:00:11 GMT]]></title><description><![CDATA[<p>Du bist was du misst schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Wenn Du size_t nicht nehmen willst, nimm</p>
<pre><code class="language-cpp">typedef decltype(sizeof(0)) Size;
</code></pre>
</blockquote>
<p>Das <strong>ist</strong> size_t <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Ach? Das ist ja interessant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052687</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 21 Apr 2011 20:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 20:06:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a></p>
<p>Seit wann ist denn int immer 4Byte und long je nach Architektur? Ich habe es noch genau anders herum gelernt und vorallem woher weiß man wie der Compiler das nun sieht?</p>
<p>@all</p>
<p>Wie schalte ich diesen Fehler beim gcc aus (wenn ich weder size_t nutzen noch deklarieren will)?</p>
<p>Edit::</p>
<p>Jetzt weiß ich wieso clang nicht meckert. Für clang ist size_t &quot;unsigned int&quot; und für gcc &quot;unsigned long int&quot;. Wer hat nun recht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052690</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Thu, 21 Apr 2011 20:06:11 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 20:07:54 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a></p>
<p>Seit wann ist denn int immer 4Byte und long je nach Architektur? Ich habe es noch genau anders herum gelernt und vorallem woher weiß man wie der Compiler das nun sieht?</p>
</blockquote>
<p>Bei beiden Typen kann der Compiler die Größe festlegen (innerhalb der Grenzen des Standard). Wenn du wissen willst, was dein Compiler dazu sagt, schau dir mal den Header &lt;limits.h&gt; bzw. &lt;climits&gt; an.</p>
<blockquote>
<p>Wie schalte ich diesen Fehler beim gcc aus (wenn ich weder size_t nutzen noch deklarieren will)?</p>
</blockquote>
<p>Was spricht denn dagegen, size_t zu verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052691</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Apr 2011 20:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 20:14:30 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Seit wann ist denn int immer 4Byte und long je nach Architektur? Ich habe es noch genau anders herum gelernt</p>
</blockquote>
<p>Zu meiner großem Enttäuschung haben sich die Entwickler von MSVC und GCC dahingehend geeinigt. Damit ist es so. Natürlich nicht laut Standard, der spezifiziert das gar nicht. Naja, ein bißchen schon, sizeof(long)&gt;=sizeof(int) ist garantiert. Damit ist deine Theorie nach Standard falsch. Ich denke, Du hast da was verwechselt. Oder Bücher gemischt. Ein Buch wie &quot;Microsoft C++ in 21 Tagen&quot; in der Zeit, wo 64 Bit nicht in Sicht war und 16 Bit längst out, kann zum Beispiel gerne long auf 4 festlegen. Und beim Wechsel von 16 auf 32 war immer die Konstante, daß (unsigned)int so breit ist wie ein Register und deswegen der natürliche Typ für Schleifenlaufvariablen und Größenangaben.</p>
<p>FlashBurn schrieb:</p>
<blockquote>
<p>und vorallem woher weiß man wie der Compiler das nun sieht?</p>
</blockquote>
<p>Mit sizeof nachschauen.</p>
<p>FlashBurn schrieb:</p>
<blockquote>
<p>Wie schalte ich diesen Fehler beim gcc aus (wenn ich weder size_t nutzen noch deklarieren will)?</p>
</blockquote>
<p>unsigned long klappt. Vermutlich bis 128-bittige Prozessoren kommen, also biste sicher für die mächsten Jahrzehnte. Nee, Jahre, der Takt wird ja kaum noch höher gedreht, nur breiter wird alle gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052692</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 21 Apr 2011 20:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 20:33:27 GMT]]></title><description><![CDATA[<p>Also im Endeffekt zeigt das mal wieder das weder C noch C++ wirklich plattformunabhängig sind und das es ohne den Compiler zu beachten nicht möglich ist bestimmten Code (z.B. die C++ Standard-Library) zu schreiben. Spricht nicht gerade für die Sprachen <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>Ich hasse es wenn man für jeden Compiler eigene Sachen definieren muss (solche ifdef´s machen den Code nicht gerade lesbarer). Wieso kann sowas nicht in dem Standard sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052694</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Thu, 21 Apr 2011 20:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 20:40:38 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p>Ich hasse es wenn man für jeden Compiler eigene Sachen definieren muss (solche ifdef´s machen den Code nicht gerade lesbarer). Wieso kann sowas nicht in dem Standard sein?</p>
</blockquote>
<p>Makros (und eben die dazugehörigen Anweisungen ( <code>#undef</code> , <code>#ifdef</code> , ...)) sind standardisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052695</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 21 Apr 2011 20:40:38 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 21:18:45 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p>Also im Endeffekt zeigt das mal wieder das weder C noch C++ wirklich plattformunabhängig sind</p>
</blockquote>
<p>Falsch. Das zeigt exakt das Gegenteil. Wäre im C++ Standard eine exakte Größe für Datentypen festgelegt, dann wird der Code auf bestimmten Mikroprozessoren nicht laufen. Du darfst eben nicht beide Sprachen als PC-Only Sprachen sehen, wie das z.B. bei Java der Fall ist. C/C++ ist mehr.</p>
<p>FlashBurn schrieb:</p>
<blockquote>
<p>und das es ohne den Compiler zu beachten nicht möglich ist bestimmten Code (z.B. die C++ Standard-Library) zu schreiben. Spricht nicht gerade für die Sprachen <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>Naja, einen Code mit falscher Syntax wirst du wohl nicht unbedingt kompilieren wollen, oder?</p>
<p>FlashBurn schrieb:</p>
<blockquote>
<p>Ich hasse es wenn man für jeden Compiler eigene Sachen definieren muss (solche ifdef´s machen den Code nicht gerade lesbarer). Wieso kann sowas nicht in dem Standard sein?</p>
</blockquote>
<p>Musst du nicht. Habe ich z.B. noch nie gebraucht. Aber stell dir vor, das gibts bereits. <a href="http://en.wikipedia.org/wiki/Stdint.h" rel="nofollow">http://en.wikipedia.org/wiki/Stdint.h</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052701</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 21 Apr 2011 21:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 22:59:03 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>FlashBurn schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Seit wann ist denn int immer 4Byte und long je nach Architektur? Ich habe es noch genau anders herum gelernt</p>
</blockquote>
<p>Zu meiner großem Enttäuschung haben sich die Entwickler von MSVC und GCC dahingehend geeinigt.</p>
</blockquote>
<p>Ich dachte immer bei MSVC sind <code>int</code> und <code>long</code> immer 4 Byte und <code>long long</code> immer 8, unabhängig von <code>sizeof(void*)</code> .</p>
<p>Und nur bei GCC gilt <code>sizeof(long) == sizeof(void*)</code> ...</p>
<p>Hat sich da was geändert?<br />
Dann müssten wir alle unsere Windows-Programme umschreiben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052741</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 21 Apr 2011 22:59:03 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Thu, 21 Apr 2011 23:06:28 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ich dachte immer bei MSVC sind <code>int</code> und <code>long</code> immer 4 Byte und <code>long long</code> immer 8, unabhängig von <code>sizeof(void*)</code> .</p>
<p>Und nur bei GCC gilt <code>sizeof(long) == sizeof(void*)</code> ...</p>
<p>Hat sich da was geändert?<br />
Dann müssten wir alle unsere Windows-Programme umschreiben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Hast recht.<br />
Hab auch falsche Bücher gelesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052744</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 21 Apr 2011 23:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 06:25:04 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wäre im C++ Standard eine exakte Größe für Datentypen festgelegt, dann wird der Code auf bestimmten Mikroprozessoren nicht laufen.</p>
</blockquote>
<p>Das musst du mir erklären.</p>
<p>Ich sehe es genau umgedreht, wenn der Datentyp den ich gewählt habe mit einmal kleiner ist, dann läuft mein Programm auf der Architektur nicht mehr. Wären die Datentypen genau spezifiziert, gäbe es solche Probleme nicht (und wozu haabn C/C++ eigentlich mehrere Datentypen für den selben Zahlenbereich?).</p>
<p>Es wäre viel besser wenn es für jeden Zahlenbereich genau einen Typen geben würde und der wäre genau festgelegt, da gäbe es dann keine Gründe warum man mit sowas aufpassen muss wenn ein Programm z.B. von 32bit auf 64bit portiert wird!</p>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Du darfst eben nicht beide Sprachen als PC-Only Sprachen sehen, wie das z.B. bei Java der Fall ist. C/C++ ist mehr.</p>
</blockquote>
<p>Wieso sollt Java PC-only sein? Java läuft auf jeder Architektur wo man ne VM dafür hat (und ich möchte meinen auch schon was von Java auf Mikrokontroller gehört zu haben).</p>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Habe ich z.B. noch nie gebraucht. Aber stell dir vor, das gibts bereits.</p>
</blockquote>
<p>Aber irgendjemand muss ja die Library schreiben. Zumal damit die &quot;Standard&quot;-Libraries nicht Compiler unabhängig sind (ohne die ifdef´s).</p>
<p>Aber keiner konnte mir nun sagen wer recht hat (bezüglich welchen Typ von Parameter new erwartet) clang oder gcc?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052775</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Fri, 22 Apr 2011 06:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:20:57 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p>Aber keiner konnte mir nun sagen wer recht hat (bezüglich welchen Typ von Parameter new erwartet) clang oder gcc?</p>
</blockquote>
<p>Ähm, size_t und clang und gcc widersprechen sich dahingehend gar nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052799</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:20:57 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:33:39 GMT]]></title><description><![CDATA[<p>Der Compilerbauer entscheidet selbst, welchen Typ <code>operator new</code> erwartet. Den musst du aber nicht wissen. Um platformunabhängigr Programme zu ermöglichen ist genau für diesen Typ ein <code>typedef</code> standardisiert: <code>size_t</code> .</p>
<p>Die Intension, für die Standardtypen keine festen Größen vorzuschreiben, hat übrigens Performancegründe. So sollte <code>int</code> ursprünglich genau ein Maschienenregister groß sein, so dass es also Mittel der Wahl ist, wenn man im beschränkten Wertebereich optimal schnell rechnen will. Braucht man feste Größen gibt es immer noch <code>int32_t</code> , <code>int32_least_t</code> , <code>int32_fast_t</code> etc. Leider haben sich im Laufe der Zeit so viele Programmierer und Programme an <code>sizeof(int) == 4</code> gewöhnt, das man aus Gründen der Abwärtskompatibilität unter x64 <code>int</code> nicht einfach auf 8 Byte setzen konnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052803</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:38:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a></p>
<p>Aber size_t ist unterschiedlich definiert und das dürfte ja eigentlich auch nicht sein, oder?</p>
<p>Ich sags mal so, entweder ist der Standard nicht eindeutig genug oder die Compiler-Bauer machen mal wieder was sie wollen <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>Edit::</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16077">@ipsec</a></p>
<p>Den Typ den new erwartet muss ich spätestens dann wissen, wenn ich die Standard-Library auf eine andere Plattform portiere und/oder eine Compiler unabhängige Standard-Library schreiben will (gibt sicherlich noch mehr Gründe).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052805</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:42:58 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Aber size_t ist unterschiedlich definiert und das dürfte ja eigentlich auch nicht sein, oder?</p>
</blockquote>
<p>Doch, das darf sein. Es ist absolut ok. In der Praxis gibt es keine Probleme damit. Es gibt nur Probleme, wenn man erwartet, daß size_t genau 4 Bytes hat und dann beim Compilerwechsel überrascht ist.<br />
Und natürlich, wenn man den ganzen Videofilm mit 3.7GB in einen std::vector stopfen will, was bei sizeof(size_t)==4 nicht klappen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052808</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:42:58 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:46:06 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p>Ich sags mal so, entweder ist der Standard nicht eindeutig genug oder die Compiler-Bauer machen mal wieder was sie wollen <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>It's not a bug. It's a feature.<br />
Der C++-Standard läßt ganz viele Sachen offen. Und allermeistens sogar mit voller Absicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052809</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:46:06 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:48:11 GMT]]></title><description><![CDATA[<p>FlashBurn schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a></p>
<p>Aber size_t ist unterschiedlich definiert und das dürfte ja eigentlich auch nicht sein, oder?</p>
<p>Ich sags mal so, entweder ist der Standard nicht eindeutig genug oder die Compiler-Bauer machen mal wieder was sie wollen <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>Nicht die Compiler-Bauer, sondern die CPU-Bauer <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="😉"
    /> size_t ist so definiert, daß er auf deiner Zielplattform jede plausible Größenangabe aufnehmen kann, die das System hergibt.</p>
<blockquote>
<p>Den Typ den new erwartet muss ich spätestens dann wissen, wenn ich die Standard-Library auf eine andere Plattform portiere und/oder eine Compiler unabhängige Standard-Library schreiben will (gibt sicherlich noch mehr Gründe).</p>
</blockquote>
<p>Auf Quellcode-Ebene kannst du eine ANSI-konforme Library überall hinportieren, wo du einen vernünftigen C++ Compiler zur Verfügung hast. Auf Binär-Ebene hast du vermutlich ganz andere Probleme, weil Plattform 1 womöglich nichts mit dem Maschinencode anfangen kann, den du für Plattform 2 erzeugt hast.</p>
<p>Und welchen Typ new erwartet, ist im Standard genau festgelegt - es ist *trommelwirbel* <strong>size_t</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052810</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:52:17 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>In der Praxis gibt es keine Probleme damit.</p>
</blockquote>
<p>Nur wenn ich das weiß und size_t entsprechend mit ifdef´s für den jeweiligen Compiler definiere.</p>
<p>Als Bsp. sei mal ein Kernel genannt, ich werde bei einem Kernel nicht die Standard-Library vom Compiler nehmen (kann ich ohnehin nicht, jedenfalls nicht so einfach), sondern entweder meine eigene schreiben oder nur das schreiben, was ich brauche (oder halt entsprechend anpassen).</p>
<p>Sicherlich bindet man sich gerade mit nem Kernel doch sehr stark an den Compiler, aber wenn du ihn wechselst und mit einmal feststellen musst, das der Kernel nicht mehr läuft oder kompiliert werden kann, weil die Typen nicht eindeutig definiert sind, sehe ich das als failure-by-design an.</p>
<p>Anderes Bsp. wären Mikrokontroller. Ich will dort auch new nutzen (als Bsp.) und dort nehme ich bestimmt keine Standard-Library sondern, werde eigenen Code nutzen und muss wieder aufpassen was der Compiler nun erwartet.</p>
<p>Das sind Probleme die man vllt nicht auf der PC-Plattform hat, aber wenn man mal über den Tellerrand guckt, wird man feststellen, dass es einige solcher Probleme gibt und eigentlich wurden C und C++ doch genau damit angepriesen das sie Plattform/Hardware unabhängig seien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052811</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:52:17 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 08:54:54 GMT]]></title><description><![CDATA[<p>Hab ich doch mit</p>
<pre><code class="language-cpp">typedef decltype(sizeof(0)) Size;
</code></pre>
<p>längst gelöst. Sogar zufällig ohne #ifdef. Und rede nicht vom Tellerrand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052812</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 22 Apr 2011 08:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 09:01:40 GMT]]></title><description><![CDATA[<p>Wenn du für einen Microcontroller programmierst, sollte dein Compiler schon eine portierte Standardlibrary anbieten. Und bei der Betriebssystemprogrammierung kannst du durchaus die Standardbibliothek verwenden. Bestimmte Dinge wie Speicherverwaltung usw. musst du zwar selbst implementieren (die Standardlibraryentwickler können ja nicht wissen, wie du das gerne hättest), aber es geht.</p>
<p>Ich sehe auch dein Problem nicht. Systeme sind unterschiedlich und erfordern unterschiedlichen Code. Das man trotzdem mit C++ platformunabhängig programmieren kann, liegt daran, weil die Bibliotheken, allen voran die Standardbibliothek, für die verschiedenen Systeme portiert sind und systemabhängige Funktionen unter einem einheitlichen Interface kapseln.<br />
Bei Java muss eben für jedes System die JVM portiert werden, bei C++ die Standardbibliothek. Das hat nichts mit Failure-by-Design zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052816</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 22 Apr 2011 09:01:40 GMT</pubDate></item><item><title><![CDATA[Reply to Typ size_t beim Überschreiben von new on Fri, 22 Apr 2011 09:14:07 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Hab ich doch mit ...</p>
</blockquote>
<p>Das muss ich irgendwie überlesen haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Kannst du mir mal erklären was das genau bedeutet bzw. was da genau passiert? Vorallem wie daraus dann sowas wie &quot;unsigned int&quot; oder &quot;unsigned long&quot; wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052825</guid><dc:creator><![CDATA[FlashBurn]]></dc:creator><pubDate>Fri, 22 Apr 2011 09:14:07 GMT</pubDate></item></channel></rss>