Article View: de.comp.lang.c++
Article #1796Re: Ein paar Fragen
From: Oliver Rebach
Date: Mon, 11 Mar 1996 07:47
Date: Mon, 11 Mar 1996 07:47
76 lines
4021 bytes
4021 bytes
Moin Ruediger, In article <Do2325.Fwu@news.cern.ch>, berlichr@afal23.cern.ch (Ruediger Berlich) writes: |> Hallo, |> ich habe ein paar Fragen : |> - Ist es durchweg ratsam, alle Z"ahl-Variablen als |> 'register' zu deklarieren ? Oder sollte man sich da nur auf die |> wichtigsten (am h"aufigsten gebrauchten) beschr"anken ? |> Ich stelle mir vor, dass ja immer nur eine beschr"ankte Anzahl von |> Variablen die Register des Prozessors belegen kann. Bremst man so nicht |> das ganze Programm aus ? Oder ist 'register' nur eine Empfehlung an |> den Compiler ? register ist eine Empfelung (muss es auch sein, man denke nur daran, dass irgentwann einmal ein Zeiger auf die Variable verlangt wird. Dann muss sie zwangslaeufig als "normale" Speichervariable angelegt werden). I.d.R. ist es auch nicht notwendig (bzw. sinnvoll) sich darueber Gedanken zu machen, welche Variablen in Registern gehalten werden sollen. Ein optimierender Compiler macht das automatisch (und meistens besser als der Programmierer). Sinnvoll ist es hoechsten, wenn man durch profilen des Otimierten Programm signifikante Performance-Maengel festgestellt hat. |> - Mir wurde erz"ahlt, dass auf modernen (>= 32 Bit-) Rechnern intern alle |> floatingpoint-Zahlen als double dargestellt sind, sodass Programme, |> die nur mit double arbeiten, schneller sind, da floats intern umgewandelt |> werden m"ussen. Stimmt das und gilt dasselbe dann auch f"ur int/long ? Wie die eingebauten Datentypen dargestellt werden, ist Sache der Compiler- bauer. Der Standard schreibt lediglich vor: sizeof(long)>=sizeof(int)>=sizeof(char)=1 Das laesst sogar die Moeglichkeit zu alle Ganzzahligen Werte 32bit zu codieren. Die kleinste anzusprechende Speichereinheit ist dann 4 Byte. Fuer Float und double gilt analoges. Gerade wenn float und double intern identisch sind faellt uebrigens die Umwandlung weg. Bei der Benutzung von Bibliotheken gilt: Wenn man die Datentypen nutzt, die im Funktions-/Methodenaufruf gewuenscht werden, ist das Programm i.d.R. minimal schneller. Typwandlungen sollte man nur fuer die Faelle benutzen, in denen es triftige Gruende gibt andere als die in den Bibliotheken benutzten Typen zu verwenden (Haupt- argument hierfuer ist aber, der gerade impliziete Typwandlungen dazu neigen, zweideutig zu sein). |> - Wenn ich etwa die folgenden (Member-)Funktionen/Klassen deklariere/definiere : |> (schwachsinnig, ich weiss, soll nur ein Beispiel sein) |> [Beispiel geloescht] |> |> w"are dann sichergestellt, dass 'z' als lokale Variable lange genug |> lebt, um operator= auszuf"uhren ? Definitiv nein. |>W"urden dann in y also lauter |> '1.' stehen ? Oder w"are das Ganze undefiniert ? Definitv ja: Der Stack wird beim return aufgraeumt, also sind die localen Variablen dann weg. |> Anders ausgedr"uckt, wie kann ich bei der R"uckgabe einer Referenz |> vermeiden, den R"uckgabewert (z) mit 'new' anlegen zu m"ussen |> (==> explizites L"oschen notwendig) Keine Referenz sondern ein Objekt zurueckgeben. Du musst ohnehin irgendwann dieses Objekt erzeugen (siehe z in deinem Beispiel). Es nuetzt nichts, man darf seine Daten nicht wegoptimieren. |> |> Danke f"ur Eure Hilfe, |> R"udiger Bitte schoen Oliver -- O. Rebach <Oliver.Rebach@UniBw-Hamburg.DE> /|\ /|\ Universitaet der Bundeswehr Hamburg FB Maschinenbau / | \/ | Fachgebiet Maschinenelemente und Getriebetchnik |--| | ~| - CAD - Labor - | | /
Technical Details
Message-ID:
<4i0lqe$d42@rzsun02.rrz.uni-hamburg.de>Path:
arc1-ca.pugleaf.net!news.rrz.uni-hamburg.de!balu!m_rebachReferences:
<Do2325.Fwu@news.cern.ch>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.rrz.uni-hamburg.de!balu!m_rebach From: m_rebach@balu.unibw-hamburg.de (Oliver Rebach) Newsgroups: de.comp.lang.c++ Subject: Re: Ein paar Fragen Date: 11 Mar 1996 07:47:25 GMT Organization: University of Federal Armed Forces, Hamburg Sender: m_rebach@balu (Oliver Rebach) Distribution: world Message-ID: <4i0lqe$d42@rzsun02.rrz.uni-hamburg.de> References: <Do2325.Fwu@news.cern.ch> NNTP-Posting-Host: balu.unibw-hamburg.de