002
03.04.2006, 10:48 Uhr
RHBaum
|
Zitat: |
ich benötige keinen dynamischen, aber einen variablen Puffer.
|
Wie wichtig ist die Performance, und wie "verwendest" du den Container ?
richtig: nen statischer buffer aufn stack ist schneller als nen dynamischer. int a[10]; versus int * pa = new int[10];
Der einzige unterschied ist aber die Erzeugung ... und der mechanismus der zerstoerung. Zur laufzeit isses volkommen wurscht, ob die dinger dynamisch oder statisch sind (vorausgesetzt deine datenmenge passt aufn stack) .
Also wenn deinen buffer einmal erzeugst, dein ganzes programm lang damit abreitest und dann die sache zerstoerst ... ist die geschwindigkeit beim erzeugen / zerstoeren meist total banane ....
Erzeugst du aber die buffer in schleifen, also die buffer werden relativ oft konstruiert und wieder verworfen, ist das new toedlich (fuer die performance) !
Dann erzeug es aufm Stack ....
Soll die groesse variabel sein, aber zur compilezeit schon bekannt, dann nutze templates ...
C++: |
template<class T,size_t ISIZE> class StaticVector { private: T data[ISIZE]; };
|
Soll die groesse aber zur laufzeit irgendwie erst ermittelt werden, hasst du nen problem ^^ entweder du verhinderst das staendige neuerzeugen ... in dem schon immer in vorinitialisierte container schreibst, oder du machst die teile groesser als wie brauchst und arbeitest wieder statisch ... auf kosten eines mehrverbrauchs an Arbeitsspeicher ....
Zitat: |
Weil er nicht dynamisch sein soll verwende ich keine verkettete Liste
|
Du bringst hier ne menge durcheinander ^^ Anwendungsfaelle / Performance betrachtungen zu den einzelnen mechanismen bei containern(Vectoren, verkettete listen, Baeume) und was die typischen anwendungsfaelle sind, solltest dir dringendst mal anschauen, wenn deine programme zumindest ansatzweise was mit dem begriff performant zu tun haben sollen ^^
Ciao ... Dieser Post wurde am 03.04.2006 um 10:52 Uhr von RHBaum editiert. |