Forum: PC-Programmierung Speicherverschwendung


von Speicherverschwendung (Gast)


Lesenswert?

...tja, meine alte Kiste ist ja mit 256MB RAM nicht mehr die modernste, 
dennoch frage ich mich, warum z.B. eine Entwicklungsumgebung wie das 
CodeComposerStudio damit nicht vernünftig arbeiten will.

Systemvoraussetzungen sind angeblich mindestens 1GB RAM. Entsprechend 
ruckelig arbeitet das Programm auch auf meinem Rechner... nur mal im 
Ernst ...

WARUM ZUM TEUFEL BRAUCHT EIN BESSERER TEXTEDITOR PERMANENTEN 
SOFORTZUGRIFF AUF 1.000.000.000 BYTE AN DATEN ???

Das, was ich am Ende in meinem uC flashen will ist ein LED-Blinkprogramm 
und kein 3D-Hologramm...

Lernen Programmierer heute nicht mehr mit Speicher sinnvol umzugehen?

von user (Gast)


Lesenswert?

Deswegen verwendet man einen gescheiten Editor, wie Emacs oder Vim

von Dnag (Gast)


Lesenswert?

Irgendwie scheint das was ich vor ein paar Jahren im ersten Semester 
C++-Grundkurs gelernt habe out zu sein. Wenn man dynamische Speicher 
verwendet, muss man diese Anfordern und wieder freigeben. Nur seltsamer 
Weise scheint das freigeben des Speichers in Vergessenheit geraten zu 
sein.

Z.B Altium Designer.... ohne regelmäßiges Neustarten müsste ich wohl 
aller 2 Stunden einen RAM-Rigel nachlegen

von Speicherverschwendung (Gast)


Lesenswert?

Ja auch bei Altium Designer stösst mir das mitlerweile tierisch auf.

Technisch gesehn können die Programme nur wenig mehr Algotithmen als vor 
einigen Jahren. Der Speicheraufwand dafür ist aber überexponentiell 
gestiegen.

Mein Fazit: Neuer Rechner noch heute bestellt...

von Verwirrter Anfänger (Gast)


Lesenswert?

Naja, der bessere Texteditor kennt ja alle Funktionen und Variablen in 
den verschieden Datein, muss sämtliche Funktionsprototypen aus Standard 
libraries und eigenen libraries im Speicher halten, soll wenn möglich 
endloses undo haben, alle Schlüsselwörter kennen, um die zu highlighten, 
und bestenfalls sollte der noch intern ein baumdarstellung des codes 
haben, um Funktionen kollabieren zu lassen und die Klammerung prüfen zu 
können. Und wenn man von einer Datei oder einem Projekt zum anderen 
wechselt, sollte der nicht endlos laden, bis der alle Daten und 
Darstellungen aufgebaut hat.

Ich würde damit wahrscheinlich auch nicht auf 1GB kommen, aber ein paar 
100MB bei größeren Projekten erscheinen mir schon möglich. Vorallem weil 
in den Systemanforderungen ja auch das Betriebssystem und der Window 
Manager mit drin sind. (Oder steht auf der Packung 1GB + was auch immer 
das BS braucht?)

von Floh (Gast)


Lesenswert?

Dnag schrieb:
> Nur seltsamer
> Weise scheint das freigeben des Speichers in Vergessenheit geraten zu
> sein.

Das kommt auch zum Teil von "moderneren" Sprachen her. Wenns wie bei 
Java einen Garbage Collector gibt, kümmern sich die Leute schon aus 
Bequemlichkeit nicht mehr ums freigeben.
Über einen Bekannten in der Softwareentwicklung hör ich immer wieder, 
wie dort teils mit Speicherplatz umgegangen wird. Dass z.B. ein 2 GB RAM 
nicht ausreicht, da sich das Javaprogramm erstmal sicherheitshalber 1,5 
GB Ram reserviert...
Aber ist wohl überall dasselbe, Rechenleistung ist billig und scheinbar 
im Überfluss vorhanden, daher wird nicht viel Wert auf Sparsamkeit 
gelegt.

von Klaus W. (mfgkw)


Lesenswert?

Floh schrieb:
> Rechenleistung ist billig

... und Intelligenz teuer, damit könnte man sparsamer programmieren.

von bluppdidupp (Gast)


Lesenswert?

Mit Java kenn ich mich jetzt nicht aus, aber kann man da überhaupt "per 
Hand" Objekte freigeben?

(Der reservierte RAM ist ja eigentlich uninteressant, interessant wirds 
erst wenn der Working-Set böse groß ist)

von Mark B. (markbrandis)


Lesenswert?

bluppdidupp schrieb:
> Mit Java kenn ich mich jetzt nicht aus, aber kann man da überhaupt "per
> Hand" Objekte freigeben?

Man kann den Garbage Collector explizit aufrufen. So elegant wie ein 
"delete object_ptr; object_ptr = NULL;" ist das halt nicht ;-)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mark Brandis schrieb:
> Man kann den Garbage Collector explizit aufrufen

Sollte man aber nicht tun... Wird zumindest als "bad style" angesehen.
Man gibt Speicher einfach  frei indem man die Referenzen auf das Objekt 
entfernt.

Mark Brandis schrieb:
> So elegant wie ein "delete object_ptr; object_ptr = NULL;"
> ist das halt nicht ;-)

Ganz besonders "elegant" ist es vor allem wenn dann irgendein 
schusselkop (meist man selbst) dann auf einen NP läuft o.ä. und das 
Programm mit 'nem Coredump abraucht... da ist dann immer die Freude 
gross :)

Floh schrieb:
> sicherheitshalber 1,5
> GB Ram reserviert

Reservierter Speicher != belegter/genutzter Speicher.

von Rolf Magnus (Gast)


Lesenswert?

Läubi .. schrieb:
> Ganz besonders "elegant" ist es vor allem wenn dann irgendein
> schusselkop (meist man selbst) dann auf einen NP läuft o.ä. und das
> Programm mit 'nem Coredump abraucht... da ist dann immer die Freude
> gross :)

Da ist es natürlich viel besser, wenn das Java-Programm mit einer 
null-pointer-Exception abbricht, obwohl es da doch gar keine Pointer 
gibt.

> Floh schrieb:
>> sicherheitshalber 1,5
>> GB Ram reserviert
>
> Reservierter Speicher != belegter/genutzter Speicher.

Um das zu erreichen, machen Betriebssysteme "lazy allocation" und 
"memory overcommitment". Das bedeutet im Klartext, daß bei der 
Allokation das System erstmal nur so tut, als ob da Speicher allokiert 
würde, und daß es auch mehr Speicher "bweilligt", als eigentlich 
überhaupt (inklusive Auslagerung) verfügbar. xUnd wenn ein Programm dann 
doch mal den Speicher braucht, der dann aber gar nicht exisitert, 
bekommt es deshalb vom System keinen gescheiten Fehler schon bei der 
Allokation zurück, sondern wird dann später beim Zugriffsversuch einfach 
abgeschossen.
Und das alles nur, weil so viele Programme eben massig Speicher 
allokieren, den sie gar nicht brauchen.

von Klaus W. (mfgkw)


Lesenswert?

Rolf Magnus schrieb:
> Da ist es natürlich viel besser, wenn das Java-Programm mit einer
> null-pointer-Exception abbricht, obwohl es da doch gar keine Pointer
> gibt.

Deshalb ja die Beschwerde des Interpreters: null pointer
Er will endlich welche haben!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> wenn das Java-Programm mit einer
> null-pointer-Exception abbricht

Das hat aber nix mit Speicher freigeben zu tun sondern ist schlicht ein 
Programmfehler, und es heißt noch lange nicht, dass das Programm dann 
abbricht.

Rolf Magnus schrieb:
> obwohl es da doch gar keine Pointer gibt
Ja eigentlich müßte es wohl NullObjektDereferenzierungsException heißen, 
aber das war dem Namensgeber wohl entweder zu lang oder er war zu sehr C 
verhaftet ;)

Rolf Magnus schrieb:
> Und das alles nur, weil so viele Programme eben massig Speicher
> allokieren, den sie gar nicht brauchen.

Ich wollte auch nur anmerken, dass nur weil ein Program Speicher 
reserviert, das nicht heißt, dass das BS diesen die ganze Zeit im RAM 
hält.

Bei Java gibt es auch noch intern eine Beschränkung, dass man beim 
Progammstart festlegt wievielt Speicher die VM maximal reservieren darf 
(und übrigens zumindest bei den VMs die ich kenne auch wieder freigibt 
wenn nicht mehr benötigt). Und dieser Wert wird von "faulen" 
Programmierer auch gerne etwas höher gesetzt.


Ich wollt jetzt hier auch keine Riesen Diskussion anstoßen erst recht 
nicht nach dem !quallifiziertem" Eingangsposting...

von Rolf Magnus (Gast)


Lesenswert?

Floh schrieb:
> Über einen Bekannten in der Softwareentwicklung hör ich immer wieder,
> wie dort teils mit Speicherplatz umgegangen wird. Dass z.B. ein 2 GB RAM
> nicht ausreicht, da sich das Javaprogramm erstmal sicherheitshalber 1,5
> GB Ram reserviert...

Das kommt auch mit dadurch, daß viele Programmierer wohl noch nicht 
mitbekommen haben, daß es Multitasking gibt und daher ihr Programm evtl. 
nicht das einzige ist, das gerade auf dem Rechner läuft.

> Aber ist wohl überall dasselbe, Rechenleistung ist billig und scheinbar
> im Überfluss vorhanden, daher wird nicht viel Wert auf Sparsamkeit
> gelegt.

Läubi .. schrieb:
> Rolf Magnus schrieb:
>> wenn das Java-Programm mit einer
>> null-pointer-Exception abbricht
>
> Das hat aber nix mit Speicher freigeben zu tun sondern ist schlicht ein
> Programmfehler,

Das ist in C aber auch so.

> und es heißt noch lange nicht, dass das Programm dann abbricht.

Wie oft kommt es denn vor, daß so eine Exception abgefangen und auf 
sinnvolle(!)  Art darauf reagiert wird? Wie du schon sagst, resultiert 
die Exception ja aus einem Programmfehler, der gar nicht hätte auftreten 
sollen. Und der Fehler ist ja schon passiert, wenn man in den 
Exception-Handler kommt.

von Robert L. (lrlr)


Lesenswert?

>Systemvoraussetzungen sind angeblich mindestens 1GB RAM.

solche Rechner bekommt man inzwischen nicht mal mehr für 1€ vekauft, 
weil das keiner haben will..

für einen (professionellen=ich will Geld verdienen) Programmierer stellt 
sich die frage also tatsächlich kaum, ober er eine Stunde investieren 
soll, um ein paar Byte zu sparen..


ausserdem: was würdest du angeben ?

ich find 1GByte als "Systemvoraussetzung" schon ziemlich mutig..
(ohne sonst irgendwelche angaben)
das reicht ja bei einigen "Betriebssystemen" schon nicht, wie sollen da 
dann noch Programme laufen ;-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Speicherverschwendung schrieb:
> WARUM ZUM TEUFEL BRAUCHT EIN BESSERER TEXTEDITOR...

braucht er nicht, schaust du hier:
http://www.mikrocontroller.net/articles/AVR_CP/M

Editoren iwe EDIT, oder sogar Wordstar

außerdem noch: BDS-C, Modula-2, ASM, BASIC, COBOL, PASCAL, Forth, 
FORTRAN-77,...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Wie oft kommt es denn vor, daß so eine Exception abgefangen und auf
> sinnvolle(!)  Art darauf reagiert wird?

kommt drauf an, eine RuntimeException sollte man natürlich nur fangen 
wenn man auch was damit anfängt, es ist aber durchaus üblich das 
EventQuellen in etwa dieser Art implementiert werden:
1
foreach(Handler handler: handlers) {
2
 try {
3
  handler.someThingChanged(event);
4
 } catch(RuntimeException e) {
5
   System.err.println("Dispatching event failed: "+e.getMessage());
6
   e.printStackTrace();
7
 }
8
}
 Das führt dann dazu das falls der Handler Fehler enthält nicht 
abgebrochen wird, und andere (fehlerfreie) Handler trotzdem ausgeführt.

Auch wird normalerweise nur der aktuelle ThreadContext abgebrochen falls 
man da schlampt...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.