Kann ein C-Compiler ausführbare 64-Bit-Dateien generieren, bei denen Zeiger 32-Bit sind?

Lesezeit: 1 Minute

Benutzer-Avatar
Maniero

Die meisten Programme passen gut in einen Adressraum von <4 GB, müssen aber neue Funktionen verwenden, die nur in der x64-Architektur verfügbar sind.

Gibt es Compiler/Plattformen, auf denen ich x64-Register und spezifische Anweisungen verwenden kann, aber 32-Bit-Zeiger beibehalten, um Speicher zu sparen?

Ist es möglich, dies transparent mit Legacy-Code zu tun? Welcher Schalter dafür?

ODER

Welche Änderungen am Code sind notwendig, um 64-Bit-Funktionen zu erhalten, während 32-Bit-Zeiger beibehalten werden?

  • Warum müssen Sie Ihre Zeigergrößen auf 32 Bit beschränken?

    – jveazey

    7. November 2010 um 9:15 Uhr

  • @John: Wenn die Daten aus vielen Zeigern bestehen, kann die Verwendung von 32-Bit-Zeigern viel Speicher sparen.

    – chao

    7. November 2010 um 9:31 Uhr

  • … und Cache-Fußabdruck und Speicher sparen Bandbreite. Speicher ist oft billig, Cache ist es nicht. Cache Misses sind immer noch sehr teuer.

    – Peter Cordes

    24. Oktober 2020 um 2:59 Uhr

  • Beachten Sie, dass Sie mit diesen Lösungen auf bis zu 2^32 Speicherwörter zugreifen können, was mehr ist als die 2^31 Bytes (2^29 32-Bit-Wörter), die Sie normalerweise in einem 32-Bit-Prozess zuweisen können auf einem modernen Betriebssystem. Daher ist es auch sehr attraktiv, die 8 oder 16 GiB Arbeitsspeicher, die typischerweise ab 2010 in Workstations zu finden sind, voll auszunutzen und dabei 32-Bit-„Zeiger“ beizubehalten.

    – Pascal Cuoq

    7. November 2010 um 17:33 Uhr


  • Wahrscheinlich würde damals niemand darüber nachdenken, aber es sind ja tatsächlich 32-Bit-Zeiger mit dem x86-64-ISA: warum nicht?

    – phuklv

    24. Oktober 2020 um 1:15 Uhr

  • Wahrscheinlich würde damals niemand darüber nachdenken, aber es sind ja tatsächlich 32-Bit-Zeiger mit dem x86-64-ISA: warum nicht?

    – phuklv

    24. Oktober 2020 um 1:15 Uhr

  • Tatsächlich ist Linux x32 ein ILP32-ABI für x86-64. Siehe andere Antworten und de.wikipedia.org/wiki/X32_ABI. Es gibt auch eine ILP32-ABI für AArch64.

    – Peter Cordes

    24. Oktober 2020 um 3:05 Uhr


1176270cookie-checkKann ein C-Compiler ausführbare 64-Bit-Dateien generieren, bei denen Zeiger 32-Bit sind?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy