Sind array's ueberfluessig?
-
otze schrieb:
dass will ich mal sehen, wie du den befehl new überschreibst
ist das so ungewöhnlich?
struct A { void* operator new(size_t size) { return ::operator new(size); } void* operator new[](size_t size) { return ::operator new[](size); } void operator delete(void* p, size_t size) { ::operator delete(p); } void operator delete[](void* p) { ::operator delete[](p); } };
-
du hast die operatoren grade nicht überschrieben, sondenr überladen(darum mein kommentar wegen mastah^^)
-
Shlo schrieb:
ist das so ungewöhnlich?
Mal abgesehen dass es den Befehl new nicht gibt, hat er vermutlich den unterschied operator new und new operator gemeint. den new operator kann man naemlich tatsaechlich nicht ueberladen
-
otze schrieb:
und nun verrat mir mal, wieso man den pointer den malloc übermittelt nicht umcasten soll, vorallem wenn man genau weis, dass man den void pointer nurnoch braucht, um den speicher wieder freizugeben.
int* p = (int*)malloc(3);
*p = 42;
-
der programmierer der sowas schreibt muss sehr dumm sein(sowas mach nichmal ich
)
-
otze schrieb:
der programmierer der sowas schreibt muss sehr dumm sein(sowas mach nichmal ich
)
otze schrieb:
int* bar2=static_cast<int*>(malloc(4000));
-
die Größe eines int's auf einem x86-System beträgt mindestens 4-Bytes und nicht 3 wie oben gepostet.
-
Ja klar, und das war schon immer und ewig so ...
Unter DOS (16bit) ist ein int 2 Byte groß.
-
dann müssen die 3-Bytes auch stimmen...
-
Shlo schrieb:
die Größe eines int's auf einem x86-System beträgt mindestens 4-Bytes und nicht 3 wie oben gepostet.
d.h. kann ich auf nem x86 kein compiler benutzen der 16..64 oder 512 bit ints benutzt?
-
b7f7 schrieb:
Shlo schrieb:
die Größe eines int's auf einem x86-System beträgt mindestens 4-Bytes und nicht 3 wie oben gepostet.
d.h. kann ich auf nem x86 kein compiler benutzen der 16..64 oder 512 bit ints benutzt?
auf einem 32-bit System? glaube ich kaum.
-
Es gibt natürlich schon workarounds wie ints mit einer bestimmten Größe, dann wird der Wert halt auf mehrere Register aufgeteilt oder künstlich abgeschnitten (wie geht das eigentlich, mit shiften?).
Ach übrigens, ich würde lieber sparsam mit Pointer-Casts und Pointer-Arithmetik umgehen, sonst kann man bei der nahenden Umstellung auf 64 Bit echt Ärger bekommen.
-
wenn 64bit kommt benutz ich eh erstmal sizeof bis mir die neuen werte ins blut übergegangen bin.
und bis dahin ist malloc(sizeof(int)*1000) vom wert her genau das gleiche wie malloc(4000).@b7f7 na wo liegt denn der unterschied zwischen dem was ich gemacht hab, und dem was mastah gemacht hat? jetzt mit deinem neuen wissen musst du das ja sagen können.
-
otze schrieb:
wenn 64bit kommt benutz ich eh erstmal sizeof bis mir die neuen werte ins blut übergegangen bin.
und bis dahin ist malloc(sizeof(int)*1000) vom wert her genau das gleiche wie malloc(4000).Interessant, du entwickelst also jede software für jede plattform neu?
Ich bleib da lieber portabel und kompiliere einfach nur neu.
wenn du wirklich 4000 statt 1000*sizeof(int) schreibst, dann kann ich dich nicht mehr ernst nehmen.
-
is sizeof() präprozessor?
-
otze schrieb:
is sizeof() präprozessor?
nö, es ist ein operator
-
is sizeof() präprozessor?
Ich wage jetzt einfach mal einen Schuss ins Blaue und vermute, dass du wissen willst, ob das Ergebnis von sizeof zu Compilezeit feststeht. Ja das tut es. 1000 * sizeof(int) wird also bereits vom Compiler ausgerechnet und nicht zur Laufzeit.
Verzeih mir, falls meine Vermutung falsch sein sollte.