heap oder data segment?



  • vista schrieb:

    AJ schrieb:

    Ich stell mir grad vor wieviel Arbeitsspeicher ich bräuchte, wenn ich Windows Vista mit allen Office-Programmen laufen lassen würde...

    was hat das mit globalen variablen zu tun?

    Globale Variablen sind global. Omnipräsent sozusagen. Stack wird nach Durchlauf einer Funktion abgeräumt, Heap wird vom Programmierer aufgeräumt. Globale Variablen nicht.

    Das merkt man sehr deutlich bei z.B. COBOL, wo es nur globale Variablen gibt. Da wird dann z.B. in die Trickkiste gegriffen um größere Bereiche mehrfach zu belegen a la unions (übel, übel, übel)...



  • scales of justice schrieb:

    was ist dann überhaupt wenn man in einer Funktion einen statischen Array anlegt?
    wird der direkt beim linken im data segment angelegt, oder wird der bei erster Benutzung im Heap angelegt?
    auf den Stack geht ja eigentlich nicht

    Statische Variablen landen im Data-Segment. Der einzige Vorteil gegenüber globalen Variablen ist, daß sie nicht direkt von außen erreichbar sind (indirekt kommst du immer dran - und damit sind sie fast genauso schlecht wie globale Variablen).



  • Paddy82 schrieb:

    vista schrieb:

    volkard schrieb:

    c.rackwitz schrieb:

    globale variablen sind zu vermeiden

    ich finde auch, daß man sie meiden sollte.

    und warum?

    Das kann ich dir genau sagen:

    !! SEITENEFFEKTE !!

    In einem grossem Projekt sind viele globale Variablen der letzte mist....

    was glaubst du wohl, wieviele globale variablen im kernel des erfolgreichsten OS der welt stecken? dutzende!
    mit globalen variablen ist es wie mit 'goto', man muss genau wissen was man tut.

    btw: programmieranfängern wird ja immer von globalen variablen und gotos abgeraten. zu recht übrigens, wie sollen sie lernen strukturiert zu coden wenn sie alles global machen, weil's besonders einfach ist?
    ...aber wenn im wirklichen leben der einsatz von globalen variablen einen echten vorteil bringt (sie müssen dazu natürlich gut dokumentiert sein und selbsterklärende namen haben), sollte man sie auch benutzen.

    LordJaxom schrieb:

    vista schrieb:

    AJ schrieb:

    Ich stell mir grad vor wieviel Arbeitsspeicher ich bräuchte, wenn ich Windows Vista mit allen Office-Programmen laufen lassen würde...

    was hat das mit globalen variablen zu tun?

    Globale Variablen sind global. Omnipräsent sozusagen. Stack wird nach Durchlauf einer Funktion abgeräumt, Heap wird vom Programmierer aufgeräumt. Globale Variablen nicht.

    ja, das sollte jedem klar sein, der globale variablen benutzt.
    aber ich kann immer noch nicht verstehen, was globale variablen mit vista und office zu tun haben. wieso sollte man mehr speicher benötigen?



  • [quote="Paddy82]
    Man kann natürlich sagen, schlecht programmiert, aber ich finde, dass man, wenn man mit so wenig globalen Variablen wie möglich arbeitet, sicherer fährt.
    Es ist für Programmierer, die nicht so sauber programmieren können, einfach nicht so schnell möglich Fehler zu produzieren. Und solche Programmierer findet man in jedem größeren Projekt...
    [/quote]

    Du bekommst von mir ein "RIESEN PFUI!!!!!!!!" für die Aussage auf die Stirn tätowiert. 🙂 Geben wir doch lieber die Schuld denen die den Zeitaufwand nicht bezahlen wollen der richtig guter Code wert ist!!!

    PS.: ...brainfuck-Prozessor kriegt auch ein Pfui 🙂



  • vista schrieb:

    Paddy82 schrieb:

    vista schrieb:

    volkard schrieb:

    c.rackwitz schrieb:

    globale variablen sind zu vermeiden

    ich finde auch, daß man sie meiden sollte.

    und warum?

    Das kann ich dir genau sagen:

    !! SEITENEFFEKTE !!

    In einem grossem Projekt sind viele globale Variablen der letzte mist....

    was glaubst du wohl, wieviele globale variablen im kernel des erfolgreichsten OS der welt stecken? dutzende!

    Wahrscheinlich ein wenig mehr wie gotos :p
    btw: erfolgreichstes OS = ???

    vista schrieb:

    mit globalen variablen ist es wie mit 'goto', man muss genau wissen was man tut.

    Richtig und darum versucht man auch sie zu vermeiden. Nur weil ich mit goto umgehen kann, würde ich trotzdem nicht auf die Idee kommen auf Schleifen zu verzichten.

    vista schrieb:

    ...aber wenn im wirklichen leben der einsatz von globalen variablen einen echten vorteil bringt (sie müssen dazu natürlich gut dokumentiert sein und selbsterklärende namen haben), sollte man sie auch benutzen.

    Dafür sind sie schlussendlich auch da.

    vista schrieb:

    LordJaxom schrieb:

    vista schrieb:

    AJ schrieb:

    Ich stell mir grad vor wieviel Arbeitsspeicher ich bräuchte, wenn ich Windows Vista mit allen Office-Programmen laufen lassen würde...

    was hat das mit globalen variablen zu tun?

    Globale Variablen sind global. Omnipräsent sozusagen. Stack wird nach Durchlauf einer Funktion abgeräumt, Heap wird vom Programmierer aufgeräumt. Globale Variablen nicht.

    ja, das sollte jedem klar sein, der globale variablen benutzt.
    aber ich kann immer noch nicht verstehen, was globale variablen mit vista und office zu tun haben. wieso sollte man mehr speicher benötigen?

    Nehmen wir mal an, dass die Programme (inklusive Betriebssystem) zu 25% aus globalen Variablen bestehen und nehmen wir weiter an, dass das Betriebssystem und 5 laufende große Programme (mal von sämtlichen Hintergrundprozessen und Pipapo abgesehen) 1GB Arbeitsspeicher belegen (mehr oder minder im Leerlauf).
    Wieviel Arbeitsspeicher brauchst du dann, wenn alle Programme (inkl. BS) zu 50% aus globalen Variablen bestehen? (=> retorische Frage ;))



  • vista schrieb:

    was glaubst du wohl, wieviele globale variablen im kernel des erfolgreichsten OS der welt stecken? dutzende!

    ich bitte darum, daß du diese behauptung zurücknimmst oder einen nachweis erbringst.



  • AJ schrieb:

    Nehmen wir mal an, dass die Programme (inklusive Betriebssystem) zu 25% aus globalen Variablen bestehen und nehmen wir weiter an, dass das Betriebssystem und 5 laufende große Programme (mal von sämtlichen Hintergrundprozessen und Pipapo abgesehen) 1GB Arbeitsspeicher belegen (mehr oder minder im Leerlauf).
    Wieviel Arbeitsspeicher brauchst du dann, wenn alle Programme (inkl. BS) zu 50% aus globalen Variablen bestehen? (=> retorische Frage ;))

    ach, so meinst du das.
    naja, du darfst nicht vergessen, dass win virtual memory und paging hat. alle segmente eines prozesses, heap, stack, BSS, code, etc. kommen aus demselben 'paged pool', und werden dynamisch alloziert, freigegeben oder auf die festplatte ausgelagert. aus sicht eines usermode-programms ist das völlig transparent d.h. es sollte keinen grossen unterschied machen, ob man sich 200MB mit malloc besorgt, oder dieselbe speichermenge als statisches array anlegt.
    erst wenn aktuell ein speicherzugriff erfolgt, sorgt windows dafür, dass physikalisch auch speicher verfügbar ist (in 4K blöcken, sollte in dem augenblick kein speicher an diese adresse gemappt sein, lädt win die seite aus dem paging file oder alloziert einen neue).
    es gibt unter win noch den 'nonpaged pool' (speicherseiten, die nicht ausgelagert werden, für DMA usw.). wenn man den zu ausgiebig beansprucht (geht aber nur im kernel mode), ist das natürlich nicht mehr so toll...

    volkard schrieb:

    vista schrieb:

    was glaubst du wohl, wieviele globale variablen im kernel des erfolgreichsten OS der welt stecken? dutzende!

    ich bitte darum, daß du diese behauptung zurücknimmst oder einen nachweis erbringst.

    zum einen sind da die dokumentierten 'GlobalFlags'
    --> http://www.osronline.com/ddkx/ddtools/gflags_7u5v.htm
    viele weitere findest du, wenn du dir die geleakten win2k sources anschaust...



  • vista schrieb:

    zum einen sind da die dokumentierten 'GlobalFlags'
    --> http://www.osronline.com/ddkx/ddtools/gflags_7u5v.htm

    was ist daran global?

    und ein verweis auf geleakte kernels bringt deiner these nix.



  • volkard schrieb:

    vista schrieb:

    zum einen sind da die dokumentierten 'GlobalFlags'
    --> http://www.osronline.com/ddkx/ddtools/gflags_7u5v.htm

    was ist daran global?

    die sind insofern global, dass man diese sogar aus dem user mode verändern und damit das verhalten des ganzen systems steuern kann.
    die anderen globalen variablen, die ich meinte, sind dem user-mode nicht zugänglich (einige davon schon, aber nur read-only). sie sind aber im kernel global und man kann sie auch böswillig verändern (machen z.b. rootkits so um usermode-prozesse zu verstecken etc.)
    win ist übrigens trotzdem modular und objektorientiert aufgebaut und, meineer meinung nach, beisst sich das nicht mit der verwendung globaler variablen.

    volkard schrieb:

    und ein verweis auf geleakte kernels bringt deiner these nix.

    ich muss dir nichts beweisen. wenn du der meinung bist, dass ich nur blödsinn schreibe, dann glaub das... 😉



  • In Linux gibt es sowohl gotos als auch globale Variablen. Wer schon Kernel Module geschrieben hat, weiß das 😉

    Auszug aus Linux Device Drivers, Third Edition

    Error recovery is sometimes best handled with the goto statement. We normally hate to use goto, but in our opinion, this is one situation where it is useful. Careful use of goto in error situations can eliminate a great deal of complicated, highly-indented, “structured” logic. Thus, in the kernel, goto is often used as shown here to deal with errors.

    Und gerade im Kernel hat man manchmal keine andere Wahl als globale Variablen zu nehmen, und diese gibt es auch; da bin ich vistas Meinung.


Anmelden zum Antworten