KABAFORCEGeliştirici KabaOS'u edinin

Bellek ayırma

İkili ağaçlar

Derinliği 4 ile 17 arasında değişen tam ikili ağaçlar kurulur, düğümleri sayılır ve bırakılır. Küçük nesne ayırma ve bırakma hızını, KabaLang'da referans sayımını ölçer.

Bu sayfayı KabaLang ile yazılmış sunucu sundu.

Canlı ölçüm

Bu testi kendi bilgisayarınızda ölçün

İkili ağaçlar tarayıcınızda, WebAssembly ile koşar: KabaLang, C++, JavaScript ve Python. Ölçüm sayfası bu testi seçili açar; sonuçlar cihazınızda kalır.

Bu testi canlı ölç

İkili ağaçlar

C++'tan 2,21 kat hızlı

derinliği 4–17 ağaçlar, yaklaşık 900.000 düğüm · bellek ayırma. Çubuk uzunsa daha hızlı.

DilReferans
KabaLang
10,6 ms
C++
23,4 msKabaLang 2,21 kat hızlı
Python
75,4 msKabaLang 7,12 kat hızlı
DilEn iyiOrtalamaDerlemeİkili boyutu
KabaLang10,6 ms11,4 ms622 ms984 KB
C++23,4 ms24,7 ms316 ms17 KB
Python75,4 ms76,7 ms––

Referans ölçüm: 21 Ekim 2026 14:53 · 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz · KabaLang 0.6.0 (94109b3+) · süreler milisaniye; ısınma koşusundan sonra 10 koşunun en iyisi.

Bu testte KabaLang / C++ oranı, zaman içinde

İkili ağaçlar: KabaLang / C++ süre oranı0,00×2,00×4,00×6,00×20 Ekim 2026 21:18 · KabaLang 0.6.0 (b0e9258) · 112 / 26 msb0e925821 Ekim 2026 05:21 · KabaLang 0.6.0 (e4756c0) · 17 / 25 ms21 Ekim 2026 06:07 · KabaLang 0.6.0 (94109b3+) · 16 / 23 ms21 Ekim 2026 06:13 · KabaLang 0.6.0 (94109b3+) · 17 / 24 ms21 Ekim 2026 07:18 · KabaLang 0.6.0 (94109b3+) · 11 / 23 ms21 Ekim 2026 14:53 · KabaLang 0.6.0 (94109b3+) · 11 / 23 ms94109b3+0,45×

Ne ölçüyor?

Küçük nesne ayırma ve bırakma hızını, KabaLang'da referans sayımını ölçer.

Kategori: Bellek ayırma. Çok sayıda küçük nesnenin ayrılması ve bırakılması. Üç program da aynı algoritmayı aynı adımlarla uygular ve aynı çıktıyı üretmek zorundadır; çıktı tutmazsa ölçüm geçersiz sayılır.

Beklenen çıktı

stdout
913133

Derleme

Komutlar ve bayraklar

KabaLang

Uçbirim
kabalang derle program.kbl -o program
./program

C++

Uçbirim
clang++ -O2 -o program program.cpp
./program

Python

Uçbirim
python3 program.py

Kaynak

Ölçülen programlar

Aşağıdaki dosyalar ölçülen programların kendisidir.

program.kbl
sayilabilir Agac:
    Yaprak
    Dal(sol: Agac, sag: Agac)

fonksiyon agac(derinlik: sayi) -> Agac:
    eger derinlik == 0:
        don Agac.Yaprak
    don Agac.Dal(agac(derinlik - 1), agac(derinlik - 1))

fonksiyon say(a: Agac) -> sayi:
    esles a:
        Dal(sol, sag):
            don 1 + say(sol) + say(sag)
        Yaprak:
            don 1
    don 0

en_derin = 16
toplam = say(agac(en_derin + 1))
uzun_omurlu = agac(en_derin)

d = 4
iken d <= en_derin:
    tekrar = 1 << (en_derin - d)
    i = 0
    iken i < tekrar:
        toplam = toplam + say(agac(d))
        i = i + 1
    d = d + 4

toplam = toplam + say(uzun_omurlu)
yazdir(toplam)
program.cpp
#include <iostream>

struct Dugum {
    Dugum *sol, *sag;
};

Dugum *agac(int derinlik) {
    if (derinlik == 0) return new Dugum{nullptr, nullptr};
    return new Dugum{agac(derinlik - 1), agac(derinlik - 1)};
}

long long say(const Dugum *a) {
    if (a->sol == nullptr) return 1;
    return 1 + say(a->sol) + say(a->sag);
}

void sil(Dugum *a) {
    if (a->sol != nullptr) {
        sil(a->sol);
        sil(a->sag);
    }
    delete a;
}

int main() {
    const int en_derin = 16;
    Dugum *gerilim = agac(en_derin + 1);
    long long toplam = say(gerilim);
    sil(gerilim);
    Dugum *uzun_omurlu = agac(en_derin);

    for (int d = 4; d <= en_derin; d += 4) {
        int tekrar = 1 << (en_derin - d);
        for (int i = 0; i < tekrar; ++i) {
            Dugum *a = agac(d);
            toplam += say(a);
            sil(a);
        }
    }

    toplam += say(uzun_omurlu);
    sil(uzun_omurlu);
    std::cout << toplam << std::endl;
    return 0;
}
program.py
def agac(derinlik):
    if derinlik == 0:
        return (None, None)
    return (agac(derinlik - 1), agac(derinlik - 1))


def say(a):
    sol, sag = a
    if sol is None:
        return 1
    return 1 + say(sol) + say(sag)


en_derin = 16
toplam = say(agac(en_derin + 1))
uzun_omurlu = agac(en_derin)

d = 4
while d <= en_derin:
    tekrar = 1 << (en_derin - d)
    for _ in range(tekrar):
        toplam += say(agac(d))
    d += 4

toplam += say(uzun_omurlu)
print(toplam)
program.js · yalnız tarayıcı ölçümünde
// Yaprak: [null, null] · dal: [sol, sag]
function agac(derinlik) {
  if (derinlik === 0) return [null, null];
  return [agac(derinlik - 1), agac(derinlik - 1)];
}

function say(a) {
  const [sol, sag] = a;
  if (sol === null) return 1;
  return 1 + say(sol) + say(sag);
}

export default function program(yaz = console.log) {
  const enDerin = 16;
  let toplam = say(agac(enDerin + 1));
  const uzunOmurlu = agac(enDerin);
  for (let d = 4; d <= enDerin; d += 4) {
    const tekrar = 1 << (enDerin - d);
    for (let i = 0; i < tekrar; i++) toplam += say(agac(d));
  }
  toplam += say(uzunOmurlu);
  yaz(toplam);
}

// `node program.js` ile de koşar (tarayıcıda ölçüm işçisi program()ı çağırır).
if (globalThis.process?.argv?.[1]?.endsWith("program.js")) program();