Article View: pl.comp.lang.c
Article #267676Re: Ciemna strona C++
From: Łukasz Krotowski
Date: Sat, 10 Nov 2007 18:19
Date: Sat, 10 Nov 2007 18:19
62 lines
4103 bytes
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-mailReferences:
<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