AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein GOTOs verhindern das RAM-Cachen - ist das richtig?
Thema durchsuchen
Ansicht
Themen-Optionen

GOTOs verhindern das RAM-Cachen - ist das richtig?

Ein Thema von Tubos · begonnen am 27. Jul 2004 · letzter Beitrag vom 30. Jul 2004
 
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#29

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?

  Alt 30. Jul 2004, 19:08
So aber nun doch Beweise im Source.
GOTO als solches haben primär keinerlei Zusammenhang mit dem Cache. Sie sind Sprachkunstrukte die unabhänig von der Hardware sind.

Zb.

Delphi-Quellcode:

procedure Test;
label
  Finish;
var
  I: Integer;
begin
  goto Finish;
  for I := 0 to 1000 do Application.ProcessMessages;
Finish:
end;
Doll. Das obige GOTO ist im Source existent, aber der Compiler, genauer gesagt der Optimierer des Delphi Compilers erkennt die Sinnlosigkeit des GOTOs und optimert es samt der Schleife einfach weg. Somit steht zwar im Source definiv ein GOTO aber im Compilat steht rein GARNICHTS. Dieses GOTO wird niemals irgendeinen Cache invalidieren, da es KEINERLEI Zusammehang zwischen diesem Sprachkonstrukt und der tatsächlichen Hardware gibt.

Weiter:

Delphi-Quellcode:
begin
  goto Finish;
  goto Do1;
  goto Do2;
Do1:
Do2:
Finish:
end;
Diesmal schalten wir den Optimierer ab. In diesem Falle wird immer vom Goto Finish nach Finish: gesprungen. Wenn dann würde also NUR dieses Goto aber NICHT die Gotos Do1 oder Do2 den Cache invalidieren können. Wiederum gibt es keinen zwingend notwendigen Zusammenhange zwischen dem Sprachkonstrukt GOTO und einem Cache.

Weiter:
Delphi-Quellcode:
sub Test
beginsub
  goto Finish:
  Print "Test"
Finish:
endsub
Diesmal benutzen wir einen BASIC Interpreter auf einem Pentium Computer. Es IST ein Interperter der Life zur Laufzeit den Text "GOTO" parst und diesen als Syntaktischen Interpreter Befehl ausführt indem er den virtuellen Programcounter des BASIC Interpreters neu setzt. Dazu scannt der Intepreter die nächsten Sourcezeilen so lange bis er zum Label Finish: angelangt ist. Erst danach setzt er die Befehls-Interpretation fort. Diesmal gibt es nun KEINELEI Zusammenhänge zwischen bem BASIC Befehl GOTO und dem Cache der CPU.

Und weiter:

Delphi-Quellcode:
begin
  goto Finish;
  for I := 0 to 1000 do Application.ProcessMessages;
  Finish;
end;
Ups,der gleiche Source aber diesmal aus einem Z80 Uralt Copmputer. Wiederum sehen wir das GOTO, und wiederum wurd es nicht wegoptimert und es steht im Compilat ein JUMP Machinencode. NUR, der Z80 hat garkeinen Cache und somit kann dieses GOTO niemals den nichtvorhandenen Cache invalidieren.


Dein Lehrer hat absolut unrecht und kann seine Aussage noch nicht einmal objektiv beweisen !!
Sage ihm das er dir seine Aussage hieb und stich fest beweisen soll, er soll dir live demoonstrieren wie ein GOTO eines BASIC Interpreters auf einem Z80 Computer den nicht vorhandenen Cache ungültig macht.

Gruß Hagen
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz