C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

stl container interna fuer boost::pool

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Guest






PostPosted: Sat Mar 17, 2007 2:39 am    Post subject: stl container interna fuer boost::pool Reply with quote



Hallo,

I. ich möchte gern boost::pool_alloc für stl::container benutzen,
benötige jedoch fürs release_memory oder purge_memory die Größe der
internen Knoten (map node, set node, list node). Gibt es einen STL-
Implementations-unabhängigen Weg, an diese Typen zu gelangen?

II. Warum sollte beim Anlegen des pool_alloc für zB set<T> T
interessant für die Parametrisierung von pool_alloc sein, wo doch der
pool aus n*set<T>::node<T> besteht?

Danke für Hilfe, jan.
Back to top
Markus Schaaf
Guest





PostPosted: Sat Mar 17, 2007 4:45 pm    Post subject: Re: stl container interna fuer boost::pool Reply with quote



jan.boehme (AT) googlemail (DOT) com schrieb:

Quote:
I. ich möchte gern boost::pool_alloc für stl::container benutzen,
benötige jedoch fürs release_memory oder purge_memory die Größe der
internen Knoten (map node, set node, list node). Gibt es einen STL-
Implementations-unabhängigen Weg, an diese Typen zu gelangen?

Was heißt "gelangen"? Sie werden dem Allokator doch als Parameter
übergeben. Über `allocator::rebind<U>` werden vom Container die
benötigten anderen Allokatoren beschafft und innerhalb dieser
kennst Du den Typen. Seine Größe ist dann `sizeof (T)`.

Quote:
II. Warum sollte beim Anlegen des pool_alloc für zB set<T> T
interessant für die Parametrisierung von pool_alloc sein, wo doch der
pool aus n*set<T>::node<T> besteht?

Du meinst, warum ein Container für `double` mit
`allocator<double>` als Parameter startet, auch wenn er ihn nicht
direkt benötigt? Weil Du sonst bei jeder neuen Std-Lib-
Implementierung ein neues Interface hättest.
Back to top
jan boehme
Guest





PostPosted: Mon Mar 19, 2007 8:03 pm    Post subject: Re: stl container interna fuer boost::pool Reply with quote



Hallo Markus,
danke für Deine Antwort.

On Mar 17, 12:45 pm, Markus Schaaf <mar...@sags-per-mail.de> wrote:

Quote:
Was heißt "gelangen"? Sie werden dem Allokator doch als Parameter
übergeben. Über `allocator::rebind<U>` werden vom Container die
benötigten anderen Allokatoren beschafft und innerhalb dieser
kennst Du den Typen. Seine Größe ist dann `sizeof (T)`.

Unter gcc wäre das für set std::_Rb_tree_node<T>. Wenn ich einen
Allokator schreibe wird mir per rebind der Typ bekannt gemacht - das
hilft mir aber auf Anwenderebene nicht weiter. Leider sind die
zugehörigen typedefs private oder protected. Ich fragte nach einer
öffentlichen Typ-Bekanntmachung ala std::set<type>::node_type nur
verschachtelter, da es sowas ja nicht überall gibt. Offenbar gab es
beim Entwurf keinerlei Interessen, diese internen Strukturen per
typedef bekannt zu machen.
boost::pool::release_memory benötigt aber
sizeof( std::set<type>::node_type ) was ich nun mit vielen ifdefs
versehen zur Verfügung stellen müsste/muss.

Quote:
Du meinst, warum ein Container für `double` mit
`allocator<double>` als Parameter startet, auch wenn er ihn nicht
direkt benötigt? Weil Du sonst bei jeder neuen Std-Lib-
Implementierung ein neues Interface hättest.

In anderem Kontext sicher sinnvoll, hier durch den Rebind und die Um-
Parametrisierung der Klasse schlicht sinnlos. Ich kann hier einen
anderen, beliebigen Typen einsetzen, ohne dass dies zu Ärger führen
würde.
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.