arraygrösse auf 2mb beschränkt??
-
gibts denn irgenteine compilerdirektive, wo man ihm sagen kann, das er arrays generell im heap anzulegen hat? oder hat das einen wichtigen grund, das der stack verwendet wird? dann muss ich es halt eindimensional mit malloc machen und mir die feldindexe manuell errechnen. ich verstehe nur nicht, warum c in diesem bereich so wahnsinnig eingeschränkt ist. es gibt doch bestimmt viele situationen, in denen man arrays >2mb braucht.
-
tenim schrieb:
gibts denn irgenteine compilerdirektive, wo man ihm sagen kann, das er arrays generell im heap anzulegen hat?
Ich denke nicht, das wäre ja auch für alle anderen Arrays fatal. Schließlich ist der Stack schneller als der Heap (dafür klein und nicht dynamisch). Du kannst ja die Stackgröße deiner Anwendung einfach ein bisschen nach oben schrauben (geht per Compiler-Option; wie, musst du mal für deinen Compiler in Erfahrung bringen).
Wenn dein Array in der Zukunft auch größer werden kann, könntest du es aber auch direkt auf den Heap legen. Denn ich schätze mal, dass irgendwann ein Punkt erreicht ist, an dem der Geschwindigkeitsvorteil des Stacks nicht mehr gilt, nämlich wenn der gar nicht mehr ganz in den Cache des Prozessors passt. Das letzte ist aber nur reine Spekulation meinerseits, da kenne ich mich nicht so gut aus.
-
_matze schrieb:
Wenn du dein Array anlegst wie oben gepostet, wird's auch auf den Stack gelegt.
nur wenn es innerhalb einer funktion ist. ausserhalb von funktionen nicht, oder man schreibt 'static' davor, dann kommt's auch nicht auf den stack.
-
Basher schrieb:
nur wenn es innerhalb einer funktion ist.
Gut, davon bin ich ausgegangen (an static hab ich aber nicht gedacht)...
-
danke, mit static kann ich was anfangen. das ist der einfachste weg.
-
tenim schrieb:
danke, mit static kann ich was anfangen. das ist der einfachste weg.
Bedenke aber, dass dein Array nur einmal im Speicher liegt, wenn du es als static deklarierst. Wenn du also die Funktion, in der es deklariert wird, nochmal aufrufst, erzeugst du kein neues Array, sondern greifst auf das bereits bestehende zu. Je nachdem, wie dein Programm aufgebaut ist, könnte das zu ungewohnten Seiteneffekten führen (ich weiß ja nicht, ob du mit mehreren Instanzen dieses Arrays arbeiten willst).
-
ne, das array wird in main definiert. ich übergebe dessen zeiger nur an subroutinen, damit die das array füllen. ich hätte es auch mit malloc machen können, aber c nimmt mir so die rechnerei mit den indexen ab und ich kann halt einfach schreiben speicher[4][12][77]=12. ausserdem muss ich mich dann nicht um die freigabe des speichers kümmern.
p.s.
es ist aber schon interessant, das in KEINEM meiner c-bücher das verhalten des schlüsselwortes "static" (bei variablendeklarationen in funktionen) inbezug auf verwendung der speicherart (freispeicher oder stackspeicher) hingewiesen wird.
deshalb bin ich froh, das hier erfahren zu haben.
hab mir jetzt übrigens das taschenbuch "the c programming language" von k&r bestellt, also quasi die bibel. mal sehen, obs da drinsteht.
-
tenim schrieb:
hab mir jetzt übrigens das taschenbuch "the c programming language" von k&r bestellt, also quasi die bibel. mal sehen, obs da drinsteht.
Hoffentlich auf englisch?
-
Hoffentlich auf englisch?
ja sicher!
nachdem ich heute früh bei amazon die kundenkritik des einen käufer las, wie scheisse die deutsche übersetzung sein soll (z.b. das arrays als "vektoren" übersetzt wurden) hab ich mir das englische taschenbuch bestellt. und es war noch billiger als die deutsche version.
hast du zufällig die deutsche version? ist die wirklich so schlimm?
-
tenim schrieb:
es ist aber schon interessant, das in KEINEM meiner c-bücher das verhalten des schlüsselwortes "static" (bei variablendeklarationen in funktionen) inbezug auf verwendung der speicherart (freispeicher oder stackspeicher) hingewiesen wird.
deshalb bin ich froh, das hier erfahren zu haben.die gehen wohl fälschlicherweise davon aus, dass das für den durschnittlichen programmierer unwichtig ist. übrigens: 'freispeicher' ist c++-jargon, damit meinen c++ progger den heap, der mit new/delete/delete[] gemanagt wird. 'static'-variablen in funktionen kommen aber nicht auf den heap, sondern in 'statischen' speicher, d.h. die aufteilung wird beim erstellen des programms festgelegt und nicht zur laufzeit dynamisch aufgeteilt, wie z.b. bei stack und heap.
-
tenim schrieb:
hast du zufällig die deutsche version? ist die wirklich so schlimm?
Ich hab sie mal kurz angelesen. Naja, es geht, Packung Schmerzfrei rein und durch.
-
hab jetzt übrigens die englische taschenbuchausgabe bekommen. inhaltlich ok, nur das schriftbild ist sowas von zum kotzen. sieht aus wie die 10. kopie von maschinenseiten.