Wieso sind Pointer vorzeichenbehaftet?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
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?

Beitrag von ts-soft »

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
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.
Bild
Ramihyn_
Beiträge: 61
Registriert: 20.06.2007 10:56

Re: Wieso sind Pointer vorzeichenbehaftet?

Beitrag von Ramihyn_ »

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).
Benutzeravatar
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?

Beitrag von ts-soft »

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 :wink:
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.
Bild
Ramihyn_
Beiträge: 61
Registriert: 20.06.2007 10:56

Re: Wieso sind Pointer vorzeichenbehaftet?

Beitrag von Ramihyn_ »

Ich weiss nicht worauf Du das beziehst, aber Du hast offenbar nicht alles gelesen worauf ich verwies.
Benutzeravatar
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?

Beitrag von ts-soft »

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.
Bild
Benutzeravatar
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?

Beitrag von NicTheQuick »

Unter einem 64-Bit Betriebssystem sind es maximal 4 GB für eine einzelne Anwendungen.
Wie bitte? Bezieht sich das so wirklich auf Windows?
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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wieso sind Pointer vorzeichenbehaftet?

Beitrag von RSBasic »

Microsoft hat geschrieben:By default, 64-bit Microsoft Windows-based applications have a user-mode address space of 8 terabytes.
http://msdn.microsoft.com/de-de/library/bb978906.aspx
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Ramihyn_
Beiträge: 61
Registriert: 20.06.2007 10:56

Re: Wieso sind Pointer vorzeichenbehaftet?

Beitrag von Ramihyn_ »

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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wieso sind Pointer vorzeichenbehaftet?

Beitrag von STARGÅTE »

Um das ganze mal wieder zurück zu holen:
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 
oder halt

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
Benutzeravatar
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?

Beitrag von ts-soft »

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.
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.
Bild
Antworten