🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1796

Re: Ein paar Fragen

#1796
From: Oliver Rebach
Date: Mon, 11 Mar 1996 07:47
76 lines
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_rebach
References: <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