CodeBlanks Logo Icon CodeBlanks

Itanium ABI

Itanium ABI ve yaygın kullanımını öğrenirsin.

Itanium ABI

Itanium C++ ABI, GCC ve Clang'ın ortak kullandığı mangling ve yerleşim standardıdır. İlk olarak Itanium mimarisi için tasarlandı ama Linux ve macOS'ta tüm mimariler için varsayılan ABI oldu.

Itanium mangling ilkeleri belgelenmiştir; bu sayede farklı derleyiciler aynı sembol adlarını üretir. Örnek: void foo() → _Z3foov. MSVC kendi ABI'sini kullanır; bu yüzden GCC ile derlenmiş bir kütüphane MSVC programına doğrudan bağlanamaz. C bağlantısı (extern "C") ortak köprüdür.

Tür kodları

Itanium ABI tür kodları tek harflıdır: v = void, i = int, d = double, b = bool, c = char, l = long. Adlar uzunluk önekiyle yazılır: 5print = print.

Böylece void print(int) imzası _Z5printi olur: _Z önek, 5print ad, i int parametre. İmza değişmedikçe sembol aynı kalır; bu da ABI kararlılığının temelidir.

Uygulama Ad alanlı fonksiyon yaz

namespace ns { int compute(int x) { return x * 2; } } yaz. main içinde std::cout << ns::compute(5); yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// ns ad alanında compute fonksiyonunu buraya tanımla

int main() {
    // compute'u çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

namespace ns {
    int compute(int x) {
        return x * 2;
    }
}

int main() {
    std::cout << ns::compute(5);
    return 0;
}

Beklenen çıktı

10

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Sembolü imzaya eşle

Kavram Anlamı
_Z3foov foo() sembolü
_Z3addii add(int, int) sembolü
_ZN2ns3barEv ns::bar() sembolü
_Z3bazv baz() sembolü

2 Mangled adı tamamla

Soru
_Z3foo____  // void foo()
Cevap
_Z3foov  // void foo()

Açıklama: v tür kodu void anlamına gelir.

3 Itanium ABI'da 'i' tür kodu neyi belirtir?

main.cpp
_Z3addii  // add(int, int)
  • int Doğru cevap
  • double
  • bool
  • void

Açıklama: Itanium'da i = int, d = double, v = void, b = bool.

Uzman bölümündeki tüm dersler