Größe eines Datentyps dynamisch zur Laufzeit erkennen?
-
Also Badestrand, wenn es wirklich so ist, dass dynamisch angeforderter Speicher auf einem 64 Bit System genauso groß wie auf einem 32 Bit System ist, dann hat sich das Problem schon erldigt!
-
nimm java
-
CodeOriginator schrieb:
Oh Gott. Das habe ich im Laufe des Threads erfahren. Du liest dir den Thread nichtmal vollständig durch, und laberst dementsprechend völligen Mist!

-
wie wärs wenn du auf einen datentyp zugreifst, der auf allen systemen 32 bit breit ist, wie z.b. (uint32_t oder so) oder ihn dir selbst baust? so wie ich das verstanden habe, soll dein system sowohl zu 64-bit also auch zu 32-bit prozessoren kompatibel sein. wenn du also beim kompilieren einen 64-bit prozessor hast (sizeof(int)==8) dann kriegst du auf den 32-bit systemen probleme... also bleibt dir nix anderes übrig als durchgehend 4-byte-ints zu verwenden.
-
CodeOriginator schrieb:
Die Datenbank wird auf einem 64 Bit System von einem 32 Bit Programm eingelesen.
Das Programm stellt fest, dass es sich um eine 32 Bit Datenbank handelt, und gibt das OK.
Anschließend möchte es beim OS dynamisch Speicherplatz für einen Integer anfordern, um dann in diesen den Integer aus der Datei lesen zu können.
Was das Programm aber nicht weis, ist, dass es in Wirklichkeit einen 64 Bit breiten Datentyp angefordert hat.

-
django schrieb:
also bleibt dir nix anderes übrig als durchgehend 4-byte-ints zu verwenden.
blöde logik... wollte eigentlich sagen, dass die größe des verwendeten datentyps gleich groß bleiben muss, ob das nun 64-bit (uint64_t) oder 32 bit (uint32_t) sind...
-
trau mich ja fast garnicht eine Idee zu posten, weil meine skills meilenweit unter denen des CodeOriginators sind .. Termin-Druck, ey?
ich würds so versuchen:
gesichert zwei gewünschte Typen nebeneinander im Speicher erzeugen und deren Adressen ermitteln, die Differenz besitimmen und glauben das wäre die tatsächliche Byte-Größe des Typs ... wenn ich mich geirrt habe bin ich jetzt wohl tot!
-
weil meine skills meilenweit unter denen des CodeOriginators sind
Social-Skills???

-
Ich habe bereits eine 32 Bit Integer-Klasse geschrieben. Eigentlich wollte ich es unkomplizierter durch eben dieses dynamische sizeof() lösen. Aber danke, dann werde ich wohl diese Alternative ergreifen müssen.
-
CodeOriginator schrieb:
Ich habe bereits eine 32 Bit Integer-Klasse geschrieben. Eigentlich wollte ich es unkomplizierter durch eben dieses dynamische sizeof() lösen. Aber danke, dann werde ich wohl diese Alternative ergreifen müssen.
ich glaube jeder andere gedanke, den du jemals hattest war komplizierter als
typedef uuint32_t { unsigned char value[4]; }uint32_t;
-
Im Gegenteil, sogar einfacher:
typedef unsigned char uint32[4];
-
lol
-
rofl, der thread ist der hammer.
ich nominiere codeoriginator für die wahl zum troll des jahres 2007!
-
Gibt's jetzt nen Keks?
-
CodeOriginator schrieb:
Die Datenbank wird auf einem 64 Bit System von einem 32 Bit Programm eingelesen. Das Programm stellt fest, dass es sich um eine 32 Bit Datenbank handelt, und gibt das OK. Anschließend möchte es beim OS dynamisch Speicherplatz für einen Integer anfordern, um dann in diesen den Integer aus der Datei lesen zu können. Was das Programm aber nicht weis, ist, dass es in Wirklichkeit einen 64 Bit breiten Datentyp angefordert hat.
Ein 32Bit Programm kann immer nur als 32Bit Programm ausgeführt werden! Man kann aus demselben Pogrammcode explizit ein 32bit und ein 64Bit Programm compilieren und linken. Aber 32Bit bleibt 32Bit Programm und 64Bit bleibt 64Bit Programm. Wir reden hier nicht über Java oder irgend eine Skriptsprache. DIE DATENGRÖSSEN SIND DAHER IMMER SCHON ZUM COMPILEZEITPUNKT BEKANNT. Ergo, braucht es auch keine dynamische Überprüfung der Größe der Datentypen!
Die Datei braucht nur eine Metainformation auf welchen System sie geschrieben wurde. Wenn sie auf verschiedenen OS laufen soll, muß man auch noch die Endiness beachten, und man muß darauf achten, daß UNIX ILP32 bzw. LP64 ist und Windows die Datentypen anders definiert. Es gibt mitterweile zusätzliche Header, die aber nicht Bestandteil der ISO C++ Norm sind, die fixe Bitgrößen garantieren.
P.S. Man sollte seine Mitmenschen nicht dumm anmachen, weil man bestimmte Dinge nicht weiß.
-
Danke für die Zusammenfassung, jetzt ist die Nachricht auch bei mir angekommen. Hätten es die Vorgänger nur einbisschen formaler zum Ausdruck gebracht, hätten wir uns jetzt nicht die fünf Seiten streiten müssen.
P.S. Man sollte seine Mitmenschen nicht dumm anmachen, weil man bestimmte Dinge nicht weiß.
Das sehe ich genauso!
-
CodeOriginator schrieb:
P.S. Man sollte seine Mitmenschen nicht dumm anmachen, weil man bestimmte Dinge nicht weiß.
Das sehe ich genauso!
Warum hast Du Dicht nicht daran gehalten? Der agressive Ton stammt ja von Dir!
-
ich möchte mich hiermit dafür stark machen dass raue ausdrücke nicht durch spott geahndet werden.
.. was aber haltet ihr von der einführung der prügelstrafe?
-
Warum hast Du Dicht nicht daran gehalten? Der agressive Ton stammt ja von Dir!
Weil einige Leute hier in diesem Thread völlig ignorant von Sachen geredet haben, von denen sie keine Ahnung haben. Paradebeispiel 'Badestrand'. Aber ich möchte hier nicht weiterhin bestimmte Personen an den Pranger stellen.
ich möchte mich hiermit dafür stark machen dass raue ausdrücke nicht durch spott geahndet werden.
Werden sie es denn?

.. was aber haltet ihr von der einführung der prügelstrafe?

Wörtlich genommen fällt das im Zeitalter der Virtualität ausgesprochen schwer.

-
wenn man keine probleme hat, dann macht man sich einfach welche