Wieso sind Pointer vorzeichenbehaftet?
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Wieso sind Pointer vorzeichenbehaftet?
Jedes Programm hat einen virtuellen Speicherbereich, den es adressieren kann. Unter den meisten
NT-Systemen sind es IMHO 3 GB, wovon 1 GB für das System reserviert bleibt, man also sowieso
nur max. 2 GB verwalten kann. Mehr wird man mit AllocateMemory auch nicht allokieren können,
da PB den Heap- verwendet, was auch für autom. freigeben bei Beendung des Programmes sorgt.
Also werden Deine Berechnungen niemals in einen Bereich kommen, wo der Wert negativ ist.
Unter 64-Bit schon gar nicht erreichbar.
In sehr speziellen Situtationen, Du verwaltest den Speicher selbst (Treiber erforderlich), wäre es
natürlich schöner, wenn PB den Pointer unsigned interpretieren würde (normalerweise natürlich auch,
aber ist nur kosmetisch).
Meine Hand lege ich allerdings nicht dafür ins Feuer, das alles von mir gesagte so 100% trifft, aber
es sollte so in etwa stimmen.
Frohes Fest
Thomas
NT-Systemen sind es IMHO 3 GB, wovon 1 GB für das System reserviert bleibt, man also sowieso
nur max. 2 GB verwalten kann. Mehr wird man mit AllocateMemory auch nicht allokieren können,
da PB den Heap- verwendet, was auch für autom. freigeben bei Beendung des Programmes sorgt.
Also werden Deine Berechnungen niemals in einen Bereich kommen, wo der Wert negativ ist.
Unter 64-Bit schon gar nicht erreichbar.
In sehr speziellen Situtationen, Du verwaltest den Speicher selbst (Treiber erforderlich), wäre es
natürlich schöner, wenn PB den Pointer unsigned interpretieren würde (normalerweise natürlich auch,
aber ist nur kosmetisch).
Meine Hand lege ich allerdings nicht dafür ins Feuer, das alles von mir gesagte so 100% trifft, aber
es sollte so in etwa stimmen.
Frohes Fest
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Wieso sind Pointer vorzeichenbehaftet?
Ich finde die Diskussion etwas überflüssig. Ein Fehler ist ein Fehler ist ein Fehler. Was bringt es also darüber zu diskutieren unter welchen Umständen ein Fehler zu Problemen führen kann, wenn es ohnehin viel weniger Arbeit kostet den Fehler einfach zu beheben und man damit auf der sicheren Seite ist?
Eine 32-bit Anwendung kann auch mehr als 4gb adressieren (32-bit CPUs haben schon seit längerem dazu Mechanismen die allerdings nur selten genutzt werden). Ein 32-bit Programm 'sollte' 4gb adressieren können. Unter manchen 64-bit Systemen kann es dies auch. Bei 32-bit Systemen sind es je nach OS und Konfiguration dann 2gb (die kompatible Lösung wegen zu vielen Programmen die Pointer vorzeichenbehaftet verarbeiten), 3gb, 3.5gb oder gar 3.75gb.
Stichworte zum Suchen sind das IMAGE_FILE_LARGE_ADDRESS_AWARE Flag in executables, die /3GB Option, PAE (http://msdn.microsoft.com/en-us/windows ... e/gg487503) und AWE (http://de.wikipedia.org/wiki/Address_Wi ... _Extension).
Eine 32-bit Anwendung kann auch mehr als 4gb adressieren (32-bit CPUs haben schon seit längerem dazu Mechanismen die allerdings nur selten genutzt werden). Ein 32-bit Programm 'sollte' 4gb adressieren können. Unter manchen 64-bit Systemen kann es dies auch. Bei 32-bit Systemen sind es je nach OS und Konfiguration dann 2gb (die kompatible Lösung wegen zu vielen Programmen die Pointer vorzeichenbehaftet verarbeiten), 3gb, 3.5gb oder gar 3.75gb.
Stichworte zum Suchen sind das IMAGE_FILE_LARGE_ADDRESS_AWARE Flag in executables, die /3GB Option, PAE (http://msdn.microsoft.com/en-us/windows ... e/gg487503) und AWE (http://de.wikipedia.org/wiki/Address_Wi ... _Extension).
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Wieso sind Pointer vorzeichenbehaftet?
Deine Links beziehen sich aber auf den Speicher, den Windows verwalten kann, nicht auf den, den ein einzelnes Programm
nutzen kann, das sind zweierlei paar Schuhe
nutzen kann, das sind zweierlei paar Schuhe

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Wieso sind Pointer vorzeichenbehaftet?
Ich weiss nicht worauf Du das beziehst, aber Du hast offenbar nicht alles gelesen worauf ich verwies.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Wieso sind Pointer vorzeichenbehaftet?
http://www.winpage.info/pages/Windows/4GB-Problem.php hat geschrieben:Nicht zuletzt aufgrund der drastisch gesunkenen Speicherpreise werden immer mehr Rechner mit mehr als 2 GB, oder gar noch mehr, Arbeitsspeicher ausgerüstet. Spätestens wenn es in Richtung der 4 GB geht, taucht dann eben immer wieder die Frage auf, warum die 4 GB nicht komplett angezeigt, bzw. genutzt werden.
Grundsätzlich muss man hier schon einmal zwischen einem 32-Bit und einem 64-Bit Betriebssystem unterscheiden. Außerdem muss man noch zwischen Anwendungen und Betriebssystem unterscheiden. Einer einzelnen Anwendung kann unter einem 32-Bit Betriebssystem maximal 2 GB an Arbeitsspeicher zugewiesen werden. Die restlichen 2 GB sind für den Betriebssystem-Kernel reserviert. Unter einem 64-Bit Betriebssystem sind es maximal 4 GB für eine einzelne Anwendungen.
Viel entscheidender ist jedoch die Tatsache, wie viel Arbeitsspeicher das Betriebssystem überhaupt verwalten kann, und da sind es bei einem 32-Bit Betriebssystem eben die ominösen 4GB.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Wieso sind Pointer vorzeichenbehaftet?
Wie bitte? Bezieht sich das so wirklich auf Windows?Unter einem 64-Bit Betriebssystem sind es maximal 4 GB für eine einzelne Anwendungen.
Auf dem 64-Bit Linux, das wir zwecks Seminar an der Uni stehen haben, kann ich locker 900 GB RAM allozieren mit einer einzelnen Anwendung. Das System hat 1 TB RAM. Was würde es da bringen, wenn man nur 4 GB pro Anwendung nutzen kann?
Re: Wieso sind Pointer vorzeichenbehaftet?
http://msdn.microsoft.com/de-de/library/bb978906.aspxMicrosoft hat geschrieben:By default, 64-bit Microsoft Windows-based applications have a user-mode address space of 8 terabytes.
Re: Wieso sind Pointer vorzeichenbehaftet?
Die Infos von winpage.info sind schlichtweg falsch. Stichworte hab ich genannt aber Google/MSDN nutzen und lesen, muss man schon selber 
Ich geb aber zu, dass das mit PAE/AWE kaum jemandem bekannt ist und auch nur sehr selten benutzt wird (manche 32-bit SQL Server nutzen es) aber das mit den bis zu 4gb in 32-bit Anwendungen, findet man öfter. Spiele profitieren z.b. davon als 32-bit Version und Tips wie man das nutzt finden sich deshalb auch unter Gamern. Gamer schrecken bekannterweise vor wenig zurück
Aber damit das funktioniert, darf man eben Pointer nicht vorzeichenbehaftet behandeln.

Ich geb aber zu, dass das mit PAE/AWE kaum jemandem bekannt ist und auch nur sehr selten benutzt wird (manche 32-bit SQL Server nutzen es) aber das mit den bis zu 4gb in 32-bit Anwendungen, findet man öfter. Spiele profitieren z.b. davon als 32-bit Version und Tips wie man das nutzt finden sich deshalb auch unter Gamern. Gamer schrecken bekannterweise vor wenig zurück

Aber damit das funktioniert, darf man eben Pointer nicht vorzeichenbehaftet behandeln.
Re: Wieso sind Pointer vorzeichenbehaftet?
Um das ganze mal wieder zurück zu holen:
Ich habe nun beschlossen sicherheitshalber nur noch auf Äquivalenz zu prüfen, soll heißen:
oder halt
Ich habe nun beschlossen sicherheitshalber nur noch auf Äquivalenz zu prüfen, soll heißen:
Code: Alles auswählen
While Not *Tiefer = *Hoeher
;...
*Tiefer + 4
Wend
Code: Alles auswählen
Repeat
;...
*Tiefer + 4
Until *Tiefer = *Hoeher
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
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Wieso sind Pointer vorzeichenbehaftet?
Auf meinem 64-Bit windows mit 4 GB RAM schaffe ich es nicht 2 GB RAM in einer 32-Bit Anwendung zu allokieren, bei
knapp über 1,5 GB ist schluß. Mit einer 64-Bit Anwendung gibt es da keine Problem.
Aber das die Pointer unsigned sein sollten, da gebe ich euch recht.
knapp über 1,5 GB ist schluß. Mit einer 64-Bit Anwendung gibt es da keine Problem.
Aber das die Pointer unsigned sein sollten, da gebe ich euch recht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
