Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Okt 31, 2024 23:56

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Jul 12, 2014 19:42 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Die Linuxfraktion mag jetzt weghören:
Bei Legacy-Anwendungen und 64 Bit hat man leider immer das Problem, dass damals stellenweise Pointer auf 32-Bit Werte konvertiert hat. Bei 32-Bit kein Problem, bei 64-Bit geht natürlich der Pointer kaputt.
Jetzt haben Windows 7 und Windows 8 an der Stelle ein verschiedenes Verhalten:
Windows 7 bleibt solange es kann bei 32-Bit Pointern, bei Windows 8 sind es direkt Pointer welche nicht mehr in den 32-Bit Bereich passen.
Mir neu und ziemlich hilfreich beim Finden solcher falschen Konvertierungen.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 14, 2014 09:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2622
Wohnort: Berlin
Programmiersprache: Go, C/C++
Mhh, ich fühl mich da ein bisschen in der Luft hängend.

Windows, bis 7, Mapped unabhängig von 32 oder 64Bit auf ein Virtuellen Adressbereich 0x80000000 den Programmcode, davor liegen protected daten, die von Windows Kernel, DLL's, SMBIOS, DMA und so weiter kommen. Dies ist seit Windows 95 bis Windows 8 unverändert.
Den restlichen Bereich hat man für sich und kann dann fuhrwerken.
So kommen auch die 2GB zustande, die man auf 32Bit Systemen zur verfügung hat.
Sollte man also über die 2GB rutschen, dann gehen 32bit mapping auf integer nicht mehr.
Das ganze wird beschleunigt, wenn man Speicher fragmentiert. Das geht zwar ziemlich schwer im Virtuellen Speicher, weil die eigentliche Fragmentierung im echtem Speicher passiert und Windows die neuen Blöcke in den Lücken des Virtuellen Speichers mapped aber auch da kann man mit der Zeit kleine Lücken auf bauen.

Das einzige was ich im Netzt finden konnte ist, dass Windows8 nicht mehr 3GB support für 32Bit App anbietet.
Man kann also nur noch 2GB Alloziieren egal ob 32 oder 64Bit Windows 8.

Wenn man Pointer auf Integer castet, dann kann VS2013 Statische Code Analyse dir genau das sagen, gcc, clang, PVS und cppcheck haben auch solche Tests mit drin.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 14, 2014 17:08 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Welche Analyse und ab welcher Version?
Das wäre doch sehr interessant.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 14, 2014 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2622
Wohnort: Berlin
Programmiersprache: Go, C/C++
http://blogs.msdn.com/b/hkamel/archive/2013/10/24/visual-studio-2013-static-code-analysis-in-depth-what-when-and-how.aspx
Das gibt es seit 2012 in VS.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 15, 2014 21:29 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
"Windows, bis 7, Mapped unabhängig von 32 oder 64Bit auf ein Virtuellen Adressbereich 0x80000000 den Programmcode"

und wo hast Du das wieder her?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 15, 2014 21:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
phlegmatiker hat geschrieben:
"Windows, bis 7, Mapped unabhängig von 32 oder 64Bit auf ein Virtuellen Adressbereich 0x80000000 den Programmcode"

und wo hast Du das wieder her?


kuckst du hier:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366912(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/hh439648(v=vs.85).aspx

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 15, 2014 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2622
Wohnort: Berlin
Programmiersprache: Go, C/C++
Beim suchen von Links hab ich fest gestellt, dass es genau anders rum war, ab 0x80000000 ist der gemeinsame Kram und davor liegt der Prozess kram.

Sehr grob umrissen.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366912%28v=vs.85%29.aspx
Detailierter.
http://www.tenouk.com/WinVirtualAddressSpace.html

Wie wird dll Speicher behandelt.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366876%28v=vs.85%29.aspx
Hier wird das Verhalten erklärt, wenn man auf System Mapped Speicher passiert, wenn man drauf rum fummelt und wo das passiert.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366785%28v=vs.85%29.aspx
Software limitierung, wieviel ein Process, je nach Level, maximal an Speicher haben kann bzw. das OS Unterstützt.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778%28v=vs.85%29.aspx

Allgemeine Lehre über Betriebssysteme.
http://www.amazon.de/Betriebssysteme-Carsten-Vogt/dp/3827411173

Weil wir bei dem Thema sind und mich mal Interessiert hat, wie ein 64Bit Prozess in einer 64Bit Umgebung gemapped wird hab ich mal gegoogelt. Das hat ein bisschen gebraucht was nützliches zu finden aber letzlich hab ich was gefunden.
http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 17 Queries | GZIP : On ]