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.
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
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
Mitglieder in diesem Forum: Google [Bot] und 7 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.