Es gibt eine Menge Treiber & amp; berühmte Anwendungen, die nicht in 64-Bit verfügbar sind. Adobe stellt beispielsweise kein 64-Bit-Flash-Player-Plugin für den Internet Explorer zur Verfügung. Und deshalb muss ich, obwohl ich 64-Bit-Vista verwende, 32-Bit-IE ausführen. Microsoft Office, Visual Studio wird auch nicht in 64-Bit-AFAIK ausgeliefert.
Nun, ich persönlich hatte nicht viel Probleme beim Erstellen meiner Anwendungen in 64-Bit. Ich muss mich nur an einige Faustregeln erinnern, z. Verwenden Sie immer SIZE_T anstelle von UINT32 für Stringlängen etc.
Meine Frage ist also, was verhindert, dass Leute für 64-Bit bauen?
Wenn Sie bei Null beginnen, ist die 64-Bit-Programmierung nicht so schwierig. Alle von Ihnen erwähnten Programme sind jedoch nicht neu.
Es ist viel einfacher, eine 64-Bit-Anwendung von Grund auf neu zu erstellen, anstatt sie von einer vorhandenen Codebasis aus zu portieren. Es gibt viele Probleme beim Portieren, besonders wenn Sie in Anwendungen kommen, in denen eine gewisse Optimierung vorgenommen wurde. Programmierer verwenden viele kleine Annahmen, um Geschwindigkeit zu gewinnen, und diese sind nicht immer einfach schnell auf 64-Bit portierbar. Ein paar Beispiele, mit denen ich mich befassen musste:
long
Ganzzahlen ändert sich. Wenn Sie also Werte über einen Socket an ein anderes Programm übergeben, das möglicherweise kein 64-Bit-Programm ist, müssen Sie Ihren Code umgestalten Zusätzlich zu den Dingen in @ jvasaks Post , die Hauptsache, die Fehler verursachen kann:
Denken Sie daran, dass Windows nicht einmal einer Anwendung (egal ob 32-Bit oder 64-Bit) erlaubt, Zeiger mit einer Adresse über 0x7FFFFFFF (2GB oder höher) zu behandeln, es sei denn, sie wurden wegen so vieler Anwendungen speziell als "LARGE_ADDRESS_AWARE"
markiert behandelt den Zeiger als einen negativen Wert an einem bestimmten Punkt und fällt um.
Die größten Probleme, die ich bei der Portierung unseres C / C ++ - Codes auf 64 Bit bekommen habe, ist die Unterstützung von Bibliotheken von Drittanbietern. Z.B. Derzeit gibt es nur 32-Bit-Versionen der Lotus Notes-API und auch MAPI, sodass Sie nicht einmal eine Verknüpfung mit ihnen herstellen können.
Da Sie auch keine 32-Bit-DLL in Ihren 64-Bit-Prozess laden können, werden Sie erneut gebrannt, wenn Sie versuchen, Dinge dynamisch zu laden. Wir haben dieses Problem erneut versucht, Microsoft Access unter 64 Bit zu unterstützen. Aus Wikipedia:
Die Jet-Datenbank-Engine bleibt bestehen 32-Bit für die absehbare Zukunft. Microsoft hat nichts vor zu nativ Unterstützung von Jet unter 64-Bit-Versionen von Windows
Ein weiterer Grund dafür, dass viele Unternehmen sich nicht die Mühe gemacht haben, 64-Bit-Versionen zu erstellen, ist einfach, dass sie es nicht müssen.
Windows hat WoW64 (Windows unter Windows 64 Bit) und Linux kann die 32 Bit Bibliotheken neben dem 64 Bit haben. Mit beiden können wir 32-Bit-Anwendungen in 64-Bit-Umgebungen ausführen.
Solange die Software auf diese Weise läuft, gibt es keinen großen Anreiz, in 64-Bit zu konvertieren.
Ausgenommen davon sind Gerätetreiber, da sie tiefer mit den Betriebssystemen verbunden sind und nicht in der 32-Bit-Schicht laufen können, die die x86-64 / AMD64-basierten 64-Bit-Betriebssysteme bieten (IA64 nicht möglich) das von dem, was ich verstehe).
Ich stimme Ihnen auf Flash-Player jedoch zu, ich bin sehr enttäuscht von Adobe, dass sie dieses Produkt nicht aktualisiert haben. Wie Sie bereits festgestellt haben, funktioniert es in 64-Bit nicht richtig, so dass Sie die 32-Bit-Version von Internet Explorer ausführen müssen.
Ich denke, es ist ein strategischer Fehler von Adobe. Den 32-Bit-Browser für den Flash-Player ausführen zu müssen, ist eine Unannehmlichkeit für die Benutzer, und viele werden diese Lösung nicht verstehen. Dies könnte dazu führen, dass Entwickler Bedenken hinsichtlich der Verwendung von Flash haben. Das Wichtigste für eine Website ist sicherzustellen, dass jeder sie sehen kann, Lösungen, die Benutzer verprellen sind in der Regel nicht beliebt. Flash Popularität wurde von seiner eigenen Popularität gefüttert, je mehr Websites, die es verwendet, je mehr Benutzer hatte es auf ihren Systemen, je mehr Benutzer, die es auf ihren Systemen hatte, desto mehr Websites waren bereit, es zu verwenden.
Der Einzelhandelsmarkt treibt diese Dinge voran, wenn ein allgemeiner Verbraucher einen neuen Computer kauft, werden sie nicht wissen, dass sie kein 64-Bit-Betriebssystem brauchen, das sie bekommen werden, weil sie es hören die neueste und beste Sache, die Zukunft der Computer, oder nur weil sie den Unterschied nicht kennen.
Vista ist jetzt seit ungefähr 2 Jahren draußen, und Windows XP 64-Bit war vorher draußen. Das ist meiner Meinung nach zu lang, als dass eine wichtige Technologie wie Flash nicht aufgerüstet werden könnte, wenn sie ihren Markt behalten wollen. Es könnte damit zu tun haben, dass Adobe Macromedia übernommen hat, und das ist ein Zeichen dafür, dass Adobe Flash nicht als Teil ihrer Zukunft sieht. Ich kann es kaum glauben, denn Flash und Dreamweaver waren die wichtigsten Bestandteile von Macromedia , aber warum haben sie es noch nicht aktualisiert?
Nur eine Vermutung, aber ich würde denken, dass ein großer Teil davon Unterstützung wäre - Wenn Adobe die 64-Bit-Version kompiliert, müssen sie es unterstützen. Auch wenn es sich um einen einfachen Kompilier-Switch handelt, müssen sie dennoch eine Menge Tests durchführen, gefolgt von der Schulung ihrer Support-Mitarbeiter, um korrekt zu reagieren. Wenn sie Probleme bekommen, führt das zu einer neuen Version von die 32-Bit-Binärdatei oder eine Verzweigung im Code, usw. So einfach es scheint, kann es für eine große Anwendung immer noch viel kosten.
Es ist nicht so einfach, einen Compiler einfach umzuschalten. Zumindest nicht, wenn du es richtig machen willst. Das offensichtlichste Beispiel ist, dass Sie alle Ihre Zeiger mit 64-Bit-Datentypen deklarieren müssen. Wenn Sie einen Code haben, der Annahmen über die Größe dieser Zeiger macht (z. B. ein Datentyp, der 4 Byte Speicher pro Zeiger zuweist), müssen Sie ihn ändern. All dies muss auch in den Bibliotheken geschehen, die Sie verwenden. Wenn Sie nur ein paar wenige verpassen, werden Sie am Ende mit Zeigern am falschen Ort landen. Zeigern sind nicht der einzige klebrige Punkt, aber sind sicherlich die offensichtlichsten.
Ihr Linux / Flash-Blog erklärt, warum es nicht so ist ein 64bit Flash Player noch. Einige sind Linux-spezifisch, andere nicht.
In erster Linie ein Support- und QA-Problem. Die Entwicklungsarbeit für 64-Bit ist für den meisten Code ziemlich trivial, aber der Testaufwand und die Supportkosten werden nicht auf die gleiche Weise reduziert.
Auf der Testseite müssen Sie immer noch dieselben Tests durchführen, auch wenn Sie "wissen", dass sie bestehen sollten.
Für viele Anwendungen bietet die Konvertierung in ein 64-Bit-Speichermodell keinen wirklichen Vorteil (da sie nie mehr als ein paar GB RAM benötigen) und kann aufgrund des größeren Zeigers die Dinge tatsächlich langsamer machen size (macht jedes Objektfeld doppelt so groß).
Fügen Sie dazu die fehlende Nachfrage hinzu (aufgrund des Hühner / Ei-Problems), und Sie können sehen, warum es sich für die meisten Entwickler nicht lohnt.