Call by Value vs. Call by Reference
-
Es ist nicht spezifiert, wie groß der Datentyp
intist. D.h. ein Integer könnte auch 8 Bytes groß sein, lieg ich da richtig?D.h. es macht definitiv Sinn solch eine Struktur per Referenz zu übergeben, weil ein Pointer auf einem x64-System 8 Bytes groß ist, richtig?
struct fx{ int x, y; };
-
Nein.
-
DirkB schrieb:
Nein.
Also angenommen ein
inthat 8 Bytes, zwei somit 16 Bytes. Und einen Pointer/eine Referenz 8 Bytes. Dann macht das sehr wohl Sinn?Liefere bitte etwas mehr Hintergrund.
-
Es ist spezifiziert, wie groß ein Datentyp mindestens sein muss.
-
Sowohl unter Linux als auch Windows ist int 32 bit groß. Dabei spielt es keine Rolle, ob das OS 32 oder 64 Bit hat.
https://msdn.microsoft.com/en-us/library/s3f49ktz.aspx
Einen Unterschied gibt es bei long. Unter Windows ist der selbst unter Windows-64 32 Bit groß. Unter 64-Bit-Linux ist er 64 Bit groß.
-
schneider schrieb:
Also angenommen ein
inthat 8 Bytes, zwei somit 16 Bytes. Und einen Pointer/eine Referenz 8 Bytes. Dann macht das sehr wohl Sinn?Warum?
-
ShadowClone schrieb:
Einen Unterschied gibt es bei long. [...] Unter 64-Bit-Linux ist er 64 Bit groß.
Kommt darauf an. Im Fall von x32-ABI hast du unrecht.
-
Ist es besser für alles außer arithmetic types eine (const)-Referenz zu nehmen?
-
schneider schrieb:
Ist es besser für alles außer arithmetic types eine (const)-Referenz zu nehmen?
Kann man im Allgemeinen nicht sagen. Muss man profilen.
-
camper schrieb:
ShadowClone schrieb:
Einen Unterschied gibt es bei long. [...] Unter 64-Bit-Linux ist er 64 Bit groß.
Kommt darauf an. Im Fall von x32-ABI hast du unrecht.
Gut, das ist ein Spezialfall.
-
schneider schrieb:
Ist es besser für alles außer arithmetic types eine (const)-Referenz zu nehmen?
Schon mal nicht, wenn 16 Byte per Register übergeben werden können.