Dinamik bellek tahsisi için veri yapısı


12

Hücre sondası modelini düşünün. Herhangi bir uzunluktaki (örneğin C'deki malloc gibi) bitişik bellek yığınlarını ayırabilen ve onları serbest bırakarak, bellek bölümlemesinden kaçınarak ve n'nin olduğu en kötü durum deterministik O (log n) zamanında her işlemi gerçekleştirebilen bir veri yapısı var mı? toplam bellek boyutu?

Bellek bölümlemesinden kaçınarak, toplam serbest hücre sayısı F ise, o zaman F hücrelerinin veya F hücrelerinin bitişik bir segmentini tahsis edebilmem gerektiğini kastediyorum.

Yanıtlar:


6

Zaman sınırlaması olmadan bile, ayrılan nesneleri sıkıştırıcı bir çöp toplayıcıda olduğu gibi hareket ettiremediğiniz sürece "bellek bölümlendirmesinden kaçınmak" imkansızdır. Robson'un ve arasında büyüklükte bloklar halinde bayt tahsisinin bayt bellek gerektirdiğini gösteren "Dinamik Depolama Ayırma ile İlgili Bazı İşlevlerin Sınırları" konusuna bakın .mnNΩ(mlog(N/n))

Ek olarak, arkadaş sistemi bu bağlamayı başarır ve logaritmik zamanda yapılabilir.


Referans için teşekkürler. Tahsis edilen nesneleri hareket ettirmeye izin veriyorum (aksi takdirde kötü bir örnek bulmak oldukça kolay görünüyor). Bahsettiğiniz alt sınır hala geçerli mi?
Manu

Bildiğim kadarıyla değil. Malloc'un gerçekte nasıl çalıştığından çok farklı olduğu için, bu konuda yeni bir soru göndermek isteyebilirsiniz. Örneğin, dikkate almanız gereken bir soru, büyüklüğünde bir bloğu taşıma işlemine ne zaman maliyet atayacağınız sorusudur . Bender ve arkadaşlarının "Bitişik Nesnelerin Dizilerini Koruma" bölümünde bununla ilgili biraz bilgi edinebilirsiniz . m
jbapple

Bir bloğu taşıma maliyeti boyutunda doğrusal ise ve blokların malloc / free çağrıları arasında bitişik olması gerekiyorsa , en kötü durumda zaman alan algoritmalar büyük blokları asla bir kez hareket ettiremezler. yerleştirildiler. Sonuç olarak, Robson tarafından tarif edilenler gibi desenler hala mümkün olabilir, böylece süper lineer alan kullanımını zorlar. O(logn)
jbapple

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.