Gibt es eine max. Arraylänge??????
-
Also,
mal angenommen man programmiert mit borland c++ (Builder 4), man arbeitet mit Windows XP und man hat 2Gigabyte Arbeitsspeicher.
davon fallen vielleicht 1 gigabyte arbeitsspeicher an andere programme vlt. Windows ab.So wie ich euch verstanden habe wäre dann meine maximale arraylaenge:
Anzahl double Elemente * Anzahl Arrayelemente = max. verfügbarer Arbeitsspeicher
Ich hab gelesen das ein double Element 8 byte Speicher hat. ! Gigabyte Speicher sind so ca. 1000Mb*1000Kb*1000Byte = 10E+09
Was dann umgerechnet 125 Mio einträge bedeuten würde.....
Stimmt das so????
Und (rein interessehalber), falls man mehr speicherplatz resserviert als man tatsächlich zur verfügung hat(physikalisch), werden dann systemdaten überschrieben?? Oder was passiert da??
Danke für die vorigen antworten
cascoin
-
cascoin schrieb:
davon fallen vielleicht 1 gigabyte arbeitsspeicher an andere programme vlt. Windows ab.
unerheblich...
du kannst davon ausgehen, dass du auf nem 32bit system max. 4GB Speicher bekommst - wenn der zusammenhängend sein soll(wie das bei nem array der fall ist), solltest du nicht von mehr als 800MB ausgehen...
wie viel RAM du selbst in deinem PC hast, ist völlig Schnuppe... Es gibt ja auch Auslagerungsdateien...
bb
-
cascoin schrieb:
werden dann systemdaten überschrieben??
cascoinDas mit sicherheit nicht, wär ja schlimm

-
Probier es doch einfach aus was auf deinem System gerade so geht.
Aber wie (fast) immer in der Programmierung: Wenn dich das Limit interessiert machst du was falsch.
-
Ok,
Wenn man also von 800MB (hat "unskilled" gesagt)ausgeht, hätte man wenn der Array nur aus double's besteht 100 Mio Zeilen......
Ist ja schon ein Haufen.
Ausprobieren kann ichs noch net weil ich noch net so weit bin.....
Aber das reicht locker. Ich hatte schiss das es nur bis 1 Mio oder so geht.Jedenfalls Danke für eure Antworten.....
Ade

-
Für die Interessierten:
bei 500 millionen einträgen kompiliert mein Compiler nicht mehr

--> total size of array must not exceed 0x7fffffff bytes
125000000 schafft mein PC locker dauert nur halt ein paar sekunden, bei 200000000 Einträgen klappts nicht mehr so super, irgentwann hab ich aufgehört, weiß nicht ob es klappen würde

-
uhsuhz schrieb:
--> total size of array must not exceed 0x7fffffff bytes
Das sind einfach 2GB, was die theoretische Obergrenze für normale Anwendungen unter einem 32-Bit Windows ist. Daher rate ich auch mal, dass du dein Programm für diese Plattform kompilierst. Abgesehen davon hat diese Zahl aber keine besondere Bedeutung.
-
Ich fasse mal die Frage und die Anworten in einer neuen Frage zusammen:
"Kann ich - rein biologisch - eine Million Jahre alt werden?
-
Nein!
-
berniebutt schrieb:
Ich fasse mal die Frage und die Anworten in einer neuen Frage zusammen:
"Kann ich - rein biologisch - eine Million Jahre alt werden?
Du kannst nicht einmal zwanzig Jahre alt werden. Ist auch keiner hier. Denn nahezu alle (oder waren es gar alle?) Zellen deines Körpers werden vorher durch neue ersetzt.

-
Fellhuhn schrieb:
Aber wie (fast) immer in der Programmierung: Wenn dich das Limit interessiert machst du was falsch.
Nicht beim Numbercrunching, um das es hier wohl geht. Es gibt nun mal Probleme, deren Speicherbedarf so schnell wächst, dass die maximalen Grenzen sehr relevant werden. Bei einer Klassifizierung mit einer SVM ist ein Speicherbedarf von N^2 durchaus ausreichend, dass man ab 10.000 Elementen Probleme mit der Machbarkeit kriegt.
-
Deswegen steht da ja auch "(fast)". :p
-
Fellhuhn schrieb:
Deswegen steht da ja auch "(fast)". :p
wenn mit "fast" meinst: "es ist im ursprünglichen Kernbereich der Informatik absolut relevant" - dann sind wir uns einig

-
Fellhuhn schrieb:
Du kannst nicht einmal zwanzig Jahre alt werden. Ist auch keiner hier. Denn nahezu alle (oder waren es gar alle?) Zellen deines Körpers werden vorher durch neue ersetzt.

Aber die Zellen vermehren sich durch Teilung. Welche der Zellen ist nach der Teiliung das Original und welche die Kopie?

-
Also,
linear lassen sich bei 32bit Adressraum höchstens 232 Bytes ansprechen. Nichtlinear sind es allerdings viel mehr, begrenzt meist durch Speichervolumina (gemeint ist z.B. die Festplatte, nicht RAM). Das ist jedoch plattformspezifisch und muss mit entsprechenden Mitteln geschehen (unter Windows etwa file mapping / shared memory).
Auf zeitgemäßen non-embedded Systemen mit zeitgemäßen OS und Applikationen ist ein kleiner Adressraum natürlich weniger ein Problem.