LONG oder INTEGER
Re: LONG oder INTEGER
Habe mal mein Desktop PC gemessen
Idle: 89 Watt
Standby 13 Watt
während er bootet bis zu 137 Watt, aber das dauert ja keine 15 Sekunden mit der SSD hier.
Also in meinem Fall wäre ausschalten sinnvoller.
Idle: 89 Watt
Standby 13 Watt
während er bootet bis zu 137 Watt, aber das dauert ja keine 15 Sekunden mit der SSD hier.
Also in meinem Fall wäre ausschalten sinnvoller.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: LONG oder INTEGER
Natürlich ist ein Umbruch unweigerlich aber der wird dann in beiden Fällen auf 0 umbrechen.auser hat geschrieben:Das Problem ist nicht + / - sondern daß man mit 4 bytes nicht unendlich lange Milliseconds zählen kann und so ein Umbruch unweigerlich ist (schlimmstenfalls machst du dir beim Umbruch mit unsigned sogar noch größere Probleme). Umgehen könnte man das Problem wenn man eine OS-Funktion verwendet die einen 8 byte Wert zurück gibt... dann sollte das Problem wirklich so weit in der Zukunft liegen daß man es ignorieren kann.Thorium hat geschrieben:Das Problem hätten wir allerdings nicht, wenn wir unsigned Integer hätten. ^^
Man kann es auch mit signed so programmieren das es kein Problem ist ob Long oder Quad. Man muss ja nur prüfen ob Bit 31 gesetzt ist. Ist aber mit unsigned viel einfacher, da es dort nach 32bit auf 0 umbricht egal ob unter x86 oder x64.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Re: LONG oder INTEGER
Hast du da ein Beispiel (gern auch in C/C++ wenn das mit unsigned weiter hilft)? Wie prüfst du da ohne großen Aufwand ob der Timeout wirklich erreicht ist (ohne daß er beim Setzen vom Timeout über den Umbruch hinaus sofort in Kraft tritt - was ja eigentlich auch nicht Sinn der Sache wäre)?Thorium hat geschrieben: Natürlich ist ein Umbruch unweigerlich aber der wird dann in beiden Fällen auf 0 umbrechen.
Man kann es auch mit signed so programmieren das es kein Problem ist ob Long oder Quad. Man muss ja nur prüfen ob Bit 31 gesetzt ist. Ist aber mit unsigned viel einfacher, da es dort nach 32bit auf 0 umbricht egal ob unter x86 oder x64.
Re: LONG oder INTEGER
Ja... die konspirieren womöglich alle mit der NSA.STARGÅTE hat geschrieben:Leider bemerke ich diese Trand auch, dass Leute ihre PC mit Ruhezustand/Standby quälen.


Re: LONG oder INTEGER
Code habe ich grad keinen aber du musst prüfen ob der neue Rückgabewert kleiner als der alte ist. Wenn ja, ist die Variable übergelaufen und du musst die Differenz entsprechend berechnen. Bei Unsigned wäre das $FFFFFFFF - AlteZeit + NeueZeit. Das ist die zeitliche Differenz zwischen neuer und alter, wenn es einen Überlauf gab berechnet mit unsigned.auser hat geschrieben: Hast du da ein Beispiel (gern auch in C/C++ wenn das mit unsigned weiter hilft)? Wie prüfst du da ohne großen Aufwand ob der Timeout wirklich erreicht ist (ohne daß er beim Setzen vom Timeout über den Umbruch hinaus sofort in Kraft tritt - was ja eigentlich auch nicht Sinn der Sache wäre)?
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Re: LONG oder INTEGER
ich hab ne frage dazu
ich hab nen alten code mit etlichen expliziten long deklarationen, also '.l' die ich gerade auf implizit integer (ohne typangabe) umstellen will. bei variablen scheint das sinnvoll. jetzt weiß ich aber nicht wie das in Strukturen ist. dort habe ich meistens .l verwendet, für einiges aber aus speichergründen .w oder .b.
ist das sinnvoll? oder sollte ich hier auch einfach alles mit .i durchdeklarieren? ich meine gelten die performance vorteile von integer auch genauso für strukturfelder?
es geht um selbstdefinierte strukturen, die nicht mit irgendwas kompatibel sein müssen.
ich hab nen alten code mit etlichen expliziten long deklarationen, also '.l' die ich gerade auf implizit integer (ohne typangabe) umstellen will. bei variablen scheint das sinnvoll. jetzt weiß ich aber nicht wie das in Strukturen ist. dort habe ich meistens .l verwendet, für einiges aber aus speichergründen .w oder .b.
ist das sinnvoll? oder sollte ich hier auch einfach alles mit .i durchdeklarieren? ich meine gelten die performance vorteile von integer auch genauso für strukturfelder?
es geht um selbstdefinierte strukturen, die nicht mit irgendwas kompatibel sein müssen.
Re: LONG oder INTEGER
In der Wortgröße des Prozessors zu arbeiten ist immer schneller.
Soll heißen, es ist immer schneller Variablen und/oder Strukturfelder als Integer zu definieren wenn es möglich ist.
Auch sollte der Offset der Felder immer ein vielfaches der Wortgröße sein damit die Adresse des Feldes passend ist.
Wenn eine Struktur nicht in einem z.B. Array verwendet wird, sollte man immer Integer verwenden.
Aus Speicherplatzgründen ist es aber durchaus auch sinnvoll Word oder Byte zu verwenden, dann aber wieder folgende Sachen berücksichtigen:
- Die Strukturgröße sollte komplett trotzdem ein Vielfaches von Integer sein, damit der Offset der Arrayfelder weiterhin passend ist.
- Word und Byte felder möglichst weit am Ende der Struktur platzieren, damit der Offset der Strukturfelder möglichst wenig Einfluss auf die anderen Felder hat. Hier kann mann auch das Schlüsselwort Align verwenden, um die Felder "auszurichten", dann geht aber wieder der Speicherplatz "verloren".
Ideal wäre z.B. zwei Words hintereinander zu definieren oder 4 Bytes halt, bzw. zwei Longs wenn die Wortgröße 8 Byte beträgt.
Soll heißen, es ist immer schneller Variablen und/oder Strukturfelder als Integer zu definieren wenn es möglich ist.
Auch sollte der Offset der Felder immer ein vielfaches der Wortgröße sein damit die Adresse des Feldes passend ist.
Wenn eine Struktur nicht in einem z.B. Array verwendet wird, sollte man immer Integer verwenden.
Aus Speicherplatzgründen ist es aber durchaus auch sinnvoll Word oder Byte zu verwenden, dann aber wieder folgende Sachen berücksichtigen:
- Die Strukturgröße sollte komplett trotzdem ein Vielfaches von Integer sein, damit der Offset der Arrayfelder weiterhin passend ist.
- Word und Byte felder möglichst weit am Ende der Struktur platzieren, damit der Offset der Strukturfelder möglichst wenig Einfluss auf die anderen Felder hat. Hier kann mann auch das Schlüsselwort Align verwenden, um die Felder "auszurichten", dann geht aber wieder der Speicherplatz "verloren".
Ideal wäre z.B. zwei Words hintereinander zu definieren oder 4 Bytes halt, bzw. zwei Longs wenn die Wortgröße 8 Byte beträgt.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: LONG oder INTEGER
Die Diskussion über ElapsedMilliseconds() gab es schon sehr oft.
Den Prozessor ist bei einer Addition egal ob es zu eine überlauf führt. Es wird dann zusätzlich das Überlauf Bit in den Status-Register gesetzt.
Das Ergebnis ist trotzdem richtig. Um die Differenz zwischen zwei Zeiten zu berechnen sind somit die beiden Zeiten einfach zu subtrahieren und das Überlauf Bit ist zu ignorieren.
Also einfach mit Long (Bei PB immer Signed) rechnen.
Die maximale Differenz zwischen zwei Ereignissen darf aber, wenn ich mich nicht verrechnet habe, nicht über 49 Tage liegen
Der vergleich auf die Differenz muss aber Unsigned durchgeführt werden, es sei denn man kommt mit der hälfte der Zeit (Differenz bis $7FFFFFFF) aus.

Den Prozessor ist bei einer Addition egal ob es zu eine überlauf führt. Es wird dann zusätzlich das Überlauf Bit in den Status-Register gesetzt.
Das Ergebnis ist trotzdem richtig. Um die Differenz zwischen zwei Zeiten zu berechnen sind somit die beiden Zeiten einfach zu subtrahieren und das Überlauf Bit ist zu ignorieren.
Also einfach mit Long (Bei PB immer Signed) rechnen.
Die maximale Differenz zwischen zwei Ereignissen darf aber, wenn ich mich nicht verrechnet habe, nicht über 49 Tage liegen
Code: Alles auswählen
Debug $FFFFFFFF / 1000 / 60 / 60 / 24

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: LONG oder INTEGER
danke stargate für die infos!
string-felder sind dann (wie andere pointer) sowieso immer integer nehme ich an. nur bei direkt enthaltenen unterstrukturen ohne pointer muss man halt wieder hingucken..
string-felder sind dann (wie andere pointer) sowieso immer integer nehme ich an. nur bei direkt enthaltenen unterstrukturen ohne pointer muss man halt wieder hingucken..
Code: Alles auswählen
Structure S2
b.b
EndStructure
Structure S1
s.s ; int
*b1.S2 ; int
b2.S2 ; 1
EndStructure
Debug SizeOf(S1)
Debug SizeOf(S2)