eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingk-d tree - jak zapisać na dyskuRe: k-d tree - jak zapisać na dysku
  • X-Received: by 2002:ac8:6747:: with SMTP id n7mr72226317qtp.19.1564383319605; Sun, 28
    Jul 2019 23:55:19 -0700 (PDT)
    X-Received: by 2002:ac8:6747:: with SMTP id n7mr72226317qtp.19.1564383319605; Sun, 28
    Jul 2019 23:55:19 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.man.lodz.pl!newsfeed.pionier.net.p
    l!2.eu.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6
    .news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!bo
    rder1.nntp.dca1.giganews.com!nntp.giganews.com!b26no2546415qtq.0!news-out.googl
    e.com!a5ni342qtd.0!nntp.google.com!b26no2546412qtq.0!postnews.google.com!glegro
    upsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Sun, 28 Jul 2019 23:55:19 -0700 (PDT)
    In-Reply-To: <qha7mb$6bv$1@dont-email.me>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=31.0.39.186;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 31.0.39.186
    References: <7...@g...com>
    <qha7mb$6bv$1@dont-email.me>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <2...@g...com>
    Subject: Re: k-d tree - jak zapisać na dysku
    From: g...@g...com
    Injection-Date: Mon, 29 Jul 2019 06:55:19 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Lines: 54
    Xref: news-archive.icm.edu.pl pl.comp.programming:213707
    [ ukryj nagłówki ]

    W dniu środa, 24 lipca 2019 20:23:09 UTC+2 użytkownik heby napisał:
    > On 24/07/2019 19:25, DMR wrote:
    > > Misterna i wyrafinowana struktura poszyta wskaźnikami została utworzona w
    pamięci, a teraz trzeba ją zapisać na dysku - tak, żeby się przy wczytywaniu jak
    najszybciej odtworzyła w stanie "operacyjnym".
    > > Jakieś równie wyrafinowane pomysły? :-)
    >
    > Może taki: wybierz sobie jakiś adres z przepastnej przestrzeni 64bit i
    > zarezerwuj go systemowo. Potem zrób allokator przydzielający obiekty
    > tylko w tym rejonie.
    >
    > Zapis i odczyt staje się wtedy trywialny.

    Pomysł w istocie zajebisty.
    A teraz zagadka: co się stanie,
    gdy dwóch użytkowników zechce
    w tym samym czasie skorzystać
    z tego programu?

    Pomysł z własnym alokatorem
    jest ok: niech Twoja aplikacja
    alokuje sobie tylko jeden blok
    pamięci przy pomocy malloc
    (nazwijmy go base), a Twój alokator
    będzie przydzielał adresy jako
    ofsety względem base, tak że efektywny
    adres to będzie base+offset.

    Po stronie asemblera takie rozwiązanie
    nie wydłuży czasu dostępu do pamięci,
    bo przynajmniej intel koduje dodawanie
    bazy i offsetu w jednej instrukcji
    adresowania pośredniego.

    Później tylko zrzucasz zaalokowany kawałek
    pamięci do pliku binarnego.

    Przy ładowaniu podobnie - alokujesz sobie
    tyle pamięci, ile zajmuje plik binarny
    (otrzymany adres to Twój nowy base)
    i ładujesz zawartość pliku pod ten adres.

    Ponieważ ta technika nie ma większego
    związku z drzewami k-wymiarowymi, jako
    bonus do odpowiedzi załączam link do
    implementacji kd-tree, którą kiedyś
    robiłem na studia. Jest oczywiście
    w Lispie (no a w czym), ale nie zajmowałem
    się tam zagadnieniem serializacji:
    https://bitbucket.org/panicz/studies/src/default/geo
    metria-grafy-algorytmy/lab3/kd.scm

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 29.07.19 09:26 heby
  • 29.07.19 11:36 fir
  • 29.07.19 16:04 fir
  • 29.07.19 16:11 DMR
  • 29.07.19 16:15 DMR

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: