🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #267676

Re: Ciemna strona C++

#267676
From: Łukasz Krotowski
Date: Sat, 10 Nov 2007 18:19
62 lines
4103 bytes
Dnia 2007-11-10, Piotr Wyderski napisał:
> Łukasz Krotowski wrote:
>
>> Ale przecież cały czas rozmawiamy o różnicach alokacji
>> dynamicznej w stosunku do alokacji stosu. W takim
>> przypadku porządek jest zapewniony.
>
> Ale alokator tego nie wie. Sam wektor również nie zna kontekstu,
> w jakim jest używany, więc nie może poinformować o nim alokatora
> nawet, gdyby to było w jakiś sposób możliwe.

Programista to wie i może użyć vector<T, stack_allocator> lub
vector<T>. 

>> Choć z drugiej strony, jeśli porównujemy z tablicami na
>> stosie powinniśmy wyłączyć możliwość zmiany rozmiaru.
>
> Sprzeciw, ja chcę mieć obiekt tymczasowy, dynamiczny i bardzo
> wydajny. Gdybym potrzebował tablicy statycznej, to mam boost::array.
>
>> Niemniej jednak, dedykowany alokator dla obiektów o krótkim czasie życia
>> mógłby zapewnić alokację o wydajności porównywalnej do stosu.
>
> Nie, bo dla alokatora nie długość życia obiektu ma znaczenie, lecz
> porządek destrukcji. Ten porządek nie jest znany i dlatego nie można
> robić założeń na jego temat. Oczywiście, szybki alokator do obiektów
> o krótkim czasie życia może być jedynie kilkadziesiąt razy wolniejszy
> niż alokacja stosowa, ale nie znając kolejności destrukcji to nie jest
> szybki alokator do obiektów tymczasowych, lecz po prostu szybki
> alokator uniwersalny.

Serio, serio?
#v+
// gdzieś, lokalnie w kodzie
memory_pool local_pool(LOCAL_POOL_SIZE);
do_not_deallocate_allocator::set_pool(local_pool);

typedef std::vector<int, do_not_deallocate_allocator> local_int_vector_t;
local_int_vector_t vec1;
// ...
// po zakończeniu pracy
// explicite, równie dobrze może być RAII
local_pool.release();
#v-

W takim przypadku alokacja będzie porównywalna ze stosową, a dealokacja
szybsza. Oczywiście długość życia obiektów ma znaczenie (chyba, że masz
wyznaczoną funkcję zajętości pamięci dla całego programu, wtedy w ogóle
nie musisz martwić się o zwalnianie -- o ile tylko pamięci fizycznej
starczy).

> A jeśli zakładasz porządek LIFO i alokator ma
> tego świadomość, to to nie będzie konstrukcja porównywalna do
> stosu, tylko stos we własnej osobie, istniejący niezależnie duplikat
> systemowej struktury danych. Można się więc takiego alokatora
> bez żalu pozbyć i koncepcyjnie zintegrować ze strukturą danych.

Kwestia podejścia, dla mnie oddzielenie mechanizmu przydziału pamięci od
kontenera przechowującego obiekty jest dobrym pomysłem.

-- 
Łukasz Krotowski | lukasz.krotowski_AT_gmail.com
Technical Details
Message-ID: <fh4snb$hvb$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl> <fh2ma2$rd0$1@news.vectranet.pl> <fh2po8$d0c$1@news.dialog.net.pl> <fh2vap$ggn$1@news.supermedia.pl> <fh4c1t$795$1@news.dialog.net.pl> <fh4cn0$etq$1@inews.gazeta.pl> <fh4ed5$8ih$1@news.dialog.net.pl> <fh4haa$2hm$1@inews.gazeta.pl> <fh4htk$agv$1@news.dialog.net.pl> <fh4n53$q3k$1@inews.gazeta.pl> <fh4qk4$fpq$1@news.dialog.net.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Łukasz Krotowski <notreal@notreal.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Sat, 10 Nov 2007 18:19:23 +0000 (UTC)
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 62
Message-ID: <fh4snb$hvb$1@inews.gazeta.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl> <fh2ma2$rd0$1@news.vectranet.pl> <fh2po8$d0c$1@news.dialog.net.pl> <fh2vap$ggn$1@news.supermedia.pl> <fh4c1t$795$1@news.dialog.net.pl> <fh4cn0$etq$1@inews.gazeta.pl> <fh4ed5$8ih$1@news.dialog.net.pl> <fh4haa$2hm$1@inews.gazeta.pl> <fh4htk$agv$1@news.dialog.net.pl> <fh4n53$q3k$1@inews.gazeta.pl> <fh4qk4$fpq$1@news.dialog.net.pl>
NNTP-Posting-Host: static-81-219-20-61.devs.futuro.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1194718763 18411 81.219.20.61 (10 Nov 2007 18:19:23 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Sat, 10 Nov 2007 18:19:23 +0000 (UTC)
X-User: bies_pospolity
User-Agent: slrn/0.9.8.1pl1 (Linux)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit