home *** CD-ROM | disk | FTP | other *** search
- In article <1992Jun30.235526.17184@bernina.ethz.ch>, Markus Wild writes:
-
- > Jein... der Effekt ist gleich, nur muss ich im einen Fall ne giganteske
- > Library (sprich amiga.lib) dazu linken, die ausserdem noch von Commodore
- > mit zweifelhaften `Perlen' ala voellig inkompatibler stdio-Funktionalitaet
- > bereicht wuerde, und im andern Fall halt nicht!
-
- Dieses Problem (sofern es eins ist) kann einfach umschifft
- werden, indem man sich den Varargs-Stub _selbst_ schreibt. Niemand muss
- mit amiga.lib linken, wenn er nicht will.
-
- > >ARRAY's anlegen will, der soll's doch bitte _statisch_ tun! Das tut
- >
- > Noe.. laengst nicht alle Tag-Arrays sind statisch, und wenn Du beginnst,
- > statische Arrays dann nachtraeglich doch noch zur Laufzeit zu aendern (und
- > das ueblicherweise natuerlich nicht durch Semaphoren schuetzt), dann ist
- > die Reentrancy zum Teufel.
-
- Das sollte man natuerlich nicht! Deswegen ja auch der
- folgende Absatz! Bitte nicht mehr sinnentstellend quoten! Ich sagte
- keineswegs, dass statische Tag-Arrays _immer_ Sinn machen. Es kommt
- auf das Wort "solange" (s.u.) an. Fuer solche Faelle hatte ich ausserdem
- vorgeschlagen, Varargs und statische Tags zu mischen, falls moeglich.
-
- > >einer moeglicherweise gewuenschten Reentrancy solange keinen Abbruch,
- > >wie sie 'const' definiert und benutzt werden, was zusaetzlich noch
- > >den netten Nebeneffekt hat, dem Compiler eine Optimierungschance
- > >mehr einzuraeumen. Und Bezeichnerkonflikten geht man aus dem Weg,
- >
- > Schon klar, dass const Objekte huebsche Hinweise fuer den Compiler beinhalten,
- > nur gibtst Du diesem dadurch, dass Du die Objekte in statischen Speicher
- > forcierst (!) keine Chance, sie gaenzlich inline zu expandieren, was ich
- > schade finde.
-
- Was ist "schade"? Beschreibe doch mal bitte, was diese
- "Inline expansion", was immer damit gemeint sei, in diesem Zusammenhang
- an Vorteilen bringt? Ich kann nicht nachvollziehen, inwieweit man die
- Zusammenstellung von Daten optimieren kann, die bereits in einer Form
- vorliegen, dass man sie 1:1 aus dem Lademodul uebernehmen kann. Unter
- der Voraussetzung, dass die verarbeitende Funktion einen _Pointer_ auf
- diese Daten erwartet, versteht sich.
-
- > > Ich kann also nicht nachvollziehen, welche tiefere
- > >Bedeutung dem Ansinnen zukommt, zur Laufzeit 'automatic' Tagarrays
- > >anlegen zu wollen? m.E. bringt das keine zusaetzlichen Vorteile.
- >
- > Siehe oben. Ausserdem, je mehr Daten Du dem Compiler zur Verfuegung stellst,
- > aus denen er versuchen kann, das Optimum rauszuholen, desto besseren Code
- > wird er erzeugen.
-
- Redundanzen koennen nie zu mehr als 100% entfernt werden.
- Also der gleiche Effekt, als wenn man sie erst gar nicht erzeugt
- (was ich versuche, zu propagieren). Darueber den _Compiler_ brueten
- zu lassen, erachte ich zumindest als ineffizient (da kommt halt der
- Oekonom durch, Informatiker moegen sich an solchen Effekten schon
- aus rein wissenschaftlichem Interesse ergoetzen). Es ist zwar schoen,
- wenn ein Compiler sowas kann, aber koennte er in dieser Zeit nichts
- Sinnvolleres anstellen? Die Rechnung "Mehr Code => Mehr Optimierung"
- scheint mir jedenfalls _etwas_ widerspruechlich! :-)
-
- > In diesem Fall (jetzt mal von dynamischen Daten aus-
- > gehend) hat er entweder die Wahl, zu einem bestimmten Zeitpunkt alle
- > Werte zu instantiieren und per Stack an die Varargs Funktion zu uebergeben
- > (womit a0/a1/d0/d1 ja wegfallen als Datentraeger), oder sie womoeglich
- > ohne Umwege direkt nach erfolgter Berechnung in die spaeter der OS-Funktion
- > zu uebergebende Tag-Struktur zu schreiben. Aus diesem Blickwinkel kriegst
- > Du mit der Varargs-Version garantiert die schlechteste Loesung, auch wenn
- > nicht garantiert ist, dass die andere Variante besser ist.
-
- - a0/a1/d0/d1 fallen frueher oder spaeter _immer_ weg, denn
- wir wollen ja eine Systemfunktion -direkt oder indirekt- aufrufen.
-
- - Die Werte werden auf dem Stack uebergeben, und da _bleiben_
- sie dann auch, weil der Stack damit zum TagArray _wird_.
-
- - 'automatic'-Variablen werden gemeinhin _auch_ nirgendwo
- anders als auf dem Stack instantiiert. Jede Abweichung
- hiervon erzeugt _nochmals_ zusaetzlichen Code zur Speicher-
- beschaffung, Verwaltung und abschliessender Freigabe.
-
- - Die Schlussfolgerung ist in diesem Zusammenhang falsch.
-
- > > Strings initialisiert man in C gemeinhin _immer_ statisch.
- > >Zur Laufzeit geht das nur mit strcpy() e.a..
- >
- > Ooch.. bist Du aber K&R treu.. nur weil das immer so war, muss das doch
- > nicht immer so bleiben?!
-
- Was gewinnt man durch die automatic-Deklaration von Strings?
- Ein _builtin_strcpy() vom (in diesem Falle dann _doch_ wieder statisch
- initialisierten) DATA-Segment auf den Stack? Doppelter Speicherbedarf,
- zusaetzlicher Code! (Womit nicht gesagt sein soll, dass es fuer diesen
- Mehraufwand niemals eine Rechtfertigung geben mag). Ich bin nur sehr
- vorsichtig mit "Segnungen" dieser Art. Wer zeitkritische Applikationen
- schreibt, mag hunderte von builtin-Funktionen und damit verbundene
- Codegenerierung erdulden [nur am Rande: strcpy() ist m.E. _selten_ der
- ideale Ansatzpunkt fuer Optimierungen], ansonsten erzeugen Funktionsaufrufe
- aber regelmaessig _kuerzeren_ Code. Keine Frage "K&R vs. ANSI" sondern ganz
- einfach "Effizienz vs. Komfort"!
-
- > Es ist doch durchaus huebsch, mktemp(3) so
- > zu implementieren:
- > char template[] = "ram:t/tmpl.XXXXXX";
-
- "Huebsch" ist eine subjektive Empfindung. Tatsache ist, dass
- im fertigen Objektmodul sowohl der initiale Stringinhalt im DATA-
- Segment steht, zum Funktionseintritt als erstes von dort auf den
- Stack _umkopiert_ wird, um dann gleich wieder in subsequenten
- Konstrukten _ueberschrieben_ zu werden. Da bleibt die Effizienz doch
- irgendwo auf der Strecke, findest Du nicht? Selbst unter der Annahme,
- dass der erste Schritt "wegoptimiert" wird (der Compiler finde irgendwie
- (?) heraus, dass der initiale Inhalt von template[] nicht benoetigt werde),
- gewinnt man mit dieser Moeglichkeit unterm Strich _nichts_.
-
- > [...] Die ANSI-Variante sieht nicht
- > nur schoener aus, sondern ist auch einfacher zu verwenden, IMHO ;-)
-
- Die Frage lautet halt immer: "Wieviel Bytes ist Dir
- Deine Faulheit wert" :-) :-).
-
- > Markus M. Wild - wild@nessie.cs.id.ethz.ch | wild@amiga.physik.unizh.ch
-
- --
- Best regards,
- Franz-Josef Reichert GERMANY - VOICE: +49 6805 7417
- Kuchlingerstrasse 13 UUCP: fjrei@kbsaar.{saar|adsp}.sub.org
- 6601 Kleinblittersdorf fjrei@kbsaar.saar.de
-
-