<?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[Probleme mit sehr großem Array]]></title><description><![CDATA[<p>Hey</p>
<p>Ich hab Probleme mit meinem Array das mit 120mio Feldern wohl wirklich sehr groß sein soll. Warum es so groß sein soll ? Da ich die Berechnung von Pokerhänden bei denen am Schluss 7 Karten sind belschleunigen wollte (weil mir das anders viel zu lange gedauert hat) indem ich gleich im Vorfeld alle Möglichkeiten berechne. So genug gelabert fürs erste ^^</p>
<pre><code>int a = 1;
	int b = 1;
	int c = 1;
	int d = 1;
	int e = 1;
	int f = 1;

	while ( a &lt; 52 ) {

		Handspeicher[a] = new char*****[52];
        //2
		while ( b &lt; 52 ) {
			Handspeicher[a][b] = new char****[52];
			//3
			while ( c &lt; 52 ) {
				Handspeicher[a][b][c] = new char***[52];
		        //4
				while ( d &lt; 52 ) {
					Handspeicher[a][b][c][d] = new char**[52];
			        //5
					while ( e &lt; 52 ) {
						Handspeicher[a][b][c][d][e] = new char*[52];
				        //6
						while ( f &lt; 52 ) {
							Handspeicher[a][b][c][d][e][f] = new char[52];
							//7

							f++;  
						}
						e++;
						f = e + 1;				        
					}
					d++;
					e = d + 1;
					f = e + 1;
				}
				c++;
				d = c + 1;
				e = d + 1;
				f = e + 1;
			}
			b++;
			c = b + 1;
			d = c + 1;
			e = d + 1;
			f = e + 1;
		}
		a++;
		b = a + 1;
		c = b + 1;
		d = c + 1;
		e = d + 1;
		f = e + 1;
	}
</code></pre>
<p>Das werden dann 18,2mio Durchläufe und 120mio Felder<br />
am Schluss sollein das Array Handspeicher[52][52][52][52][52][52][52] <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="😮"
    /> rauskommen (also so ungefähr denn alle Plätze werden ja nicht belegt)^^. Also zunächstmal bin ich etwas verwirt denn 120.000.000 *char(1byte) wären meiner Rechnung nach 120MB was zwar wohl nicht ohne ist aber meiner meinung nach noch vertretbar ist oder irre ich mich da ^^ und was mich noch wunder das der Taskmanager eine ganz andere Zahl anzeigt (bevor der code auch nur annähernd durchgelaufen ist).</p>
<p>Wie oben erwähnt mache ich das um die Berechnung zu beschleunigen <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="🙄"
    /> da mein programm 0.5sec gebraucht hat um 2 Karten zu vergleichen und das Berechnungsprogramm Pokerstove nur einen Bruchteil davon( ich glaub zwar nicht das es das andere Programm so macht aber irgedwie muss es doch schneller gehn).</p>
<p>Ich bin für Anregungen aller Art froh denn momentan weiß ich nicht weiter was ich machen soll.<br />
Als umgebung hab ich visual Studio 2005</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196113/probleme-mit-sehr-großem-array</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 07:05:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196113.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Oct 2007 14:53:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit sehr großem Array on Thu, 25 Oct 2007 14:53:19 GMT]]></title><description><![CDATA[<p>Hey</p>
<p>Ich hab Probleme mit meinem Array das mit 120mio Feldern wohl wirklich sehr groß sein soll. Warum es so groß sein soll ? Da ich die Berechnung von Pokerhänden bei denen am Schluss 7 Karten sind belschleunigen wollte (weil mir das anders viel zu lange gedauert hat) indem ich gleich im Vorfeld alle Möglichkeiten berechne. So genug gelabert fürs erste ^^</p>
<pre><code>int a = 1;
	int b = 1;
	int c = 1;
	int d = 1;
	int e = 1;
	int f = 1;

	while ( a &lt; 52 ) {

		Handspeicher[a] = new char*****[52];
        //2
		while ( b &lt; 52 ) {
			Handspeicher[a][b] = new char****[52];
			//3
			while ( c &lt; 52 ) {
				Handspeicher[a][b][c] = new char***[52];
		        //4
				while ( d &lt; 52 ) {
					Handspeicher[a][b][c][d] = new char**[52];
			        //5
					while ( e &lt; 52 ) {
						Handspeicher[a][b][c][d][e] = new char*[52];
				        //6
						while ( f &lt; 52 ) {
							Handspeicher[a][b][c][d][e][f] = new char[52];
							//7

							f++;  
						}
						e++;
						f = e + 1;				        
					}
					d++;
					e = d + 1;
					f = e + 1;
				}
				c++;
				d = c + 1;
				e = d + 1;
				f = e + 1;
			}
			b++;
			c = b + 1;
			d = c + 1;
			e = d + 1;
			f = e + 1;
		}
		a++;
		b = a + 1;
		c = b + 1;
		d = c + 1;
		e = d + 1;
		f = e + 1;
	}
</code></pre>
<p>Das werden dann 18,2mio Durchläufe und 120mio Felder<br />
am Schluss sollein das Array Handspeicher[52][52][52][52][52][52][52] <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="😮"
    /> rauskommen (also so ungefähr denn alle Plätze werden ja nicht belegt)^^. Also zunächstmal bin ich etwas verwirt denn 120.000.000 *char(1byte) wären meiner Rechnung nach 120MB was zwar wohl nicht ohne ist aber meiner meinung nach noch vertretbar ist oder irre ich mich da ^^ und was mich noch wunder das der Taskmanager eine ganz andere Zahl anzeigt (bevor der code auch nur annähernd durchgelaufen ist).</p>
<p>Wie oben erwähnt mache ich das um die Berechnung zu beschleunigen <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="🙄"
    /> da mein programm 0.5sec gebraucht hat um 2 Karten zu vergleichen und das Berechnungsprogramm Pokerstove nur einen Bruchteil davon( ich glaub zwar nicht das es das andere Programm so macht aber irgedwie muss es doch schneller gehn).</p>
<p>Ich bin für Anregungen aller Art froh denn momentan weiß ich nicht weiter was ich machen soll.<br />
Als umgebung hab ich visual Studio 2005</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391964</guid><dc:creator><![CDATA[F1go]]></dc:creator><pubDate>Thu, 25 Oct 2007 14:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit sehr großem Array on Thu, 25 Oct 2007 15:33:50 GMT]]></title><description><![CDATA[<p>ich sehe hier kein großes Array - nur einen Haufen kleine Arrays.<br />
387659012 Arrays aus jeweils 52 pointern - insgesamt ca. 150GB bei 64-bit-Pointern<br />
dazu 19770609664 Arrays aus je 52 byte - insgesamt etwa 957.5 GB<br />
Ein durchschnittlicher Rechner wird da ein paar Probleme haben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391982</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 25 Oct 2007 15:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit sehr großem Array on Thu, 25 Oct 2007 15:38:11 GMT]]></title><description><![CDATA[<p>Also 52^7 ergibt nach meiner Rechnung 1028071702528 Byte<br />
was einem ganzen Terrabyte entspricht (Ich hoffe mal<br />
das nicht ich mich jetzt verrechnet habe).</p>
<p>Es gab vor einiger Zeit hier mal einen ziemlich<br />
ausführlichen Thread wie man soetwas am Besten implementiert.<br />
Ich weis die Suche funktioniert nicht richtig.<br />
Aber vll. findest du über google etwas.</p>
<p>//EDIT<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-192312-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-192312-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html</a><br />
Das war er. vll. findest du hier einen besseren Ansatz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391984</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Thu, 25 Oct 2007 15:38:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit sehr großem Array on Thu, 25 Oct 2007 21:28:44 GMT]]></title><description><![CDATA[<p>@ camper du hast natürlich recht es ist kein großes Array aber ein großes dynamisches Array? naja egal<br />
mit den Pointer könntest du recht haben die sind warscheinlich wirklich größer als 1 byte aber 64bit ?<br />
also auf meinem system müssten das 32bit sein (natürlich systemabhängig).<br />
Wie kommst du eigentlich auf 387659012 ? die 52^6 sind auch nicht ganz richtig weil ich doppelte Karten auslasse. Das mit den 4byte Adressen erklärt nun wohl das mehr an platzbedarf(ich hab mir irgedwie gedacht das dafür nur ein byte für das char belegt wird). Nun bleibt aber die Frage wie ich das kleiner bekomm bzw überhaupt realisierbar ist ?</p>
<p>@Storm.Xapek.de mit 52^7 kann man hier nicht rechnen da ich ja doppelte Hände ausgeschlossen habe und das mit den 120mio Feldern und 18 mio Durchläufen schon stimmen müsste (habs mit Zählern getestet). In dem Thread geht es zwar tatsächlich um das gleiche problem sogar mit dem gleichen ziel ^^ aber eine lösung wurde da ja nicht gefunden <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>trotzdem danke für die schnellen Antworten <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/1392207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392207</guid><dc:creator><![CDATA[F1go]]></dc:creator><pubDate>Thu, 25 Oct 2007 21:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit sehr großem Array on Thu, 25 Oct 2007 22:50:58 GMT]]></title><description><![CDATA[<p>oh ja, den ganzen Teil nach den news hab ich gar nicht gelesen - for-Schleifen wären hier wirklich übersichtlicher.<br />
Dann sind das immer noch (ich war faul und hab den Compiler gefragt) 2643315 Allokationen für Pointerarrays aus je 52 Pointern - also mindestens je 208 Bytes, wenn man 32-bit -Zeiger zugrunde legt: insgesamt also 549809520 Bytes = 524MB + Overhead<br />
Dazu 18260636 Allokationen für char-Arrays aus je 52 chars. mithin insgesamt 949553072 = 905.5MB + Overhead<br />
Der Gesamtspeicherverbrauch liegt damit bei etwa 1.4 GB</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392229</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 25 Oct 2007 22:50:58 GMT</pubDate></item></channel></rss>