Was ist das große Problem mit Build-64-Bit-Versionen von Binärdateien?

8

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?

    
user15071 01.10.2008, 22:38
quelle

8 Antworten

15

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:

  • Richtige Ausrichtung von Elementen innerhalb einer Struktur. Wenn sich Datengrößen ändern, können Annahmen, dass bestimmte Felder in einer Struktur an einer optimalen Speichergrenze ausgerichtet werden, fehlschlagen.
  • Die Länge von 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
  • Zeigerlängen ändern sich, da es so schwer ist, Code zu entschlüsseln, der ein Guru ist, der die Firma verlassen hat, wird ein wenig komplizierter, um zu debuggen
  • Zugrunde liegende Bibliotheken müssen außerdem über 64-Bit-Unterstützung verfügen, damit sie ordnungsgemäß verknüpft werden können. Dies ist ein großer Teil des Problems der Portierung von Code, wenn Sie auf Bibliotheken angewiesen sind, die nicht als Open Source
  • verfügbar sind
jvasak 01.10.2008 22:54
quelle
5

Zusätzlich zu den Dingen in @ jvasaks Post , die Hauptsache, die Fehler verursachen kann:

  • Zeiger sind größer als Ints - eine große Menge Code macht die Annahme, dass die Größen gleich sind.

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.

    
Michael Burr 01.10.2008 23:14
quelle
4

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

    
Luke Quinane 02.10.2008 00:28
quelle
3

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?

    
ManiacZX 02.10.2008 00:18
quelle
2

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.

    
Chris Shaffer 01.10.2008 22:43
quelle
1

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.

    
Brian 01.10.2008 22:56
quelle
0

Ihr Linux / Flash-Blog erklärt, warum es nicht so ist ein 64bit Flash Player noch. Einige sind Linux-spezifisch, andere nicht.

    
Oli 01.10.2008 22:53
quelle
0

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.

    
Mark Bessey 01.10.2008 22:54
quelle

Tags und Links