Evgenios1 Δημοσ. 18 Δεκεμβρίου 2010 Δημοσ. 18 Δεκεμβρίου 2010 Πω πω! Τι ωραιο που ειναι αυτο το καινουριο πραμα . Με το που διαβασα πως δουλευει μπηκα στο πειρασμο να το δοκιμασω. Απλα δειτε τα αποτελεσματα του γεμισματος ενους vector. Χωρις move constructor >Process time:2933ms Max memory needed:655888384 Total memory that need:335544300 Create object Total Memory:16834560 bytes Copy object Total Memory:33751040 bytes Delete object Total Memory:16949248 bytes Create object Total Memory:33759232 bytes Copy object Total Memory:50573312 bytes Delete object Total Memory:33767424 bytes Copy object Total Memory:50577408 bytes Delete object Total Memory:33767424 bytes Create object Total Memory:50577408 bytes Copy object Total Memory:67391488 bytes Copy object Total Memory:84205568 bytes Delete object Total Memory:67395584 bytes Delete object Total Memory:50581504 bytes Copy object Total Memory:67395584 bytes Delete object Total Memory:50585600 bytes Create object Total Memory:67395584 bytes Copy object Total Memory:84205568 bytes Copy object Total Memory:101019648 bytes Copy object Total Memory:117833728 bytes Delete object Total Memory:101023744 bytes Delete object Total Memory:84209664 bytes Delete object Total Memory:67399680 bytes Copy object Total Memory:84209664 bytes Delete object Total Memory:67399680 bytes Create object Total Memory:84209664 bytes Copy object Total Memory:101023744 bytes Copy object Total Memory:117833728 bytes Copy object Total Memory:134647808 bytes Copy object Total Memory:151461888 bytes Delete object Total Memory:134651904 bytes Delete object Total Memory:117841920 bytes Delete object Total Memory:101027840 bytes Delete object Total Memory:84213760 bytes Copy object Total Memory:101027840 bytes Delete object Total Memory:84217856 bytes Create object Total Memory:101027840 bytes Copy object Total Memory:117837824 bytes Delete object Total Memory:101027840 bytes Create object Total Memory:117837824 bytes Copy object Total Memory:134651904 bytes Copy object Total Memory:151461888 bytes Copy object Total Memory:168275968 bytes Copy object Total Memory:185090048 bytes Copy object Total Memory:201904128 bytes Copy object Total Memory:218718208 bytes Delete object Total Memory:201908224 bytes Delete object Total Memory:185094144 bytes Delete object Total Memory:168284160 bytes Delete object Total Memory:151470080 bytes Delete object Total Memory:134660096 bytes Delete object Total Memory:117841920 bytes Copy object Total Memory:134656000 bytes Delete object Total Memory:117846016 bytes Create object Total Memory:134656000 bytes Copy object Total Memory:151470080 bytes Delete object Total Memory:134660096 bytes Create object Total Memory:151470080 bytes Copy object Total Memory:168284160 bytes Delete object Total Memory:151474176 bytes Create object Total Memory:168284160 bytes Copy object Total Memory:185094144 bytes Copy object Total Memory:201908224 bytes Copy object Total Memory:218718208 bytes Copy object Total Memory:235532288 bytes Copy object Total Memory:252346368 bytes Copy object Total Memory:269160448 bytes Copy object Total Memory:285974528 bytes Copy object Total Memory:302788608 bytes Copy object Total Memory:319602688 bytes Delete object Total Memory:302792704 bytes Delete object Total Memory:285978624 bytes Delete object Total Memory:269168640 bytes Delete object Total Memory:252354560 bytes Delete object Total Memory:235540480 bytes Delete object Total Memory:218726400 bytes Delete object Total Memory:201916416 bytes Delete object Total Memory:185102336 bytes Delete object Total Memory:168288256 bytes Copy object Total Memory:185102336 bytes Delete object Total Memory:168292352 bytes Create object Total Memory:185102336 bytes Copy object Total Memory:201916416 bytes Delete object Total Memory:185106432 bytes Create object Total Memory:201916416 bytes Copy object Total Memory:218726400 bytes Delete object Total Memory:201916416 bytes Create object Total Memory:218726400 bytes Copy object Total Memory:235540480 bytes Delete object Total Memory:218730496 bytes Create object Total Memory:235540480 bytes Copy object Total Memory:252350464 bytes Copy object Total Memory:269164544 bytes Copy object Total Memory:285978624 bytes Copy object Total Memory:302792704 bytes Copy object Total Memory:319602688 bytes Copy object Total Memory:336416768 bytes Copy object Total Memory:353230848 bytes Copy object Total Memory:370044928 bytes Copy object Total Memory:386859008 bytes Copy object Total Memory:403673088 bytes Copy object Total Memory:420487168 bytes Copy object Total Memory:437305344 bytes Copy object Total Memory:454119424 bytes Delete object Total Memory:437309440 bytes Delete object Total Memory:420499456 bytes Delete object Total Memory:403685376 bytes Delete object Total Memory:386875392 bytes Delete object Total Memory:370061312 bytes Delete object Total Memory:353247232 bytes Delete object Total Memory:336433152 bytes Delete object Total Memory:319619072 bytes Delete object Total Memory:302804992 bytes Delete object Total Memory:285995008 bytes Delete object Total Memory:269180928 bytes Delete object Total Memory:252362752 bytes Delete object Total Memory:235548672 bytes Copy object Total Memory:252362752 bytes Delete object Total Memory:235552768 bytes Create object Total Memory:252362752 bytes Copy object Total Memory:269176832 bytes Delete object Total Memory:252366848 bytes Create object Total Memory:269176832 bytes Copy object Total Memory:285990912 bytes Delete object Total Memory:269180928 bytes Create object Total Memory:285990912 bytes Copy object Total Memory:302804992 bytes Delete object Total Memory:285995008 bytes Create object Total Memory:302804992 bytes Copy object Total Memory:319614976 bytes Delete object Total Memory:302804992 bytes Create object Total Memory:319614976 bytes Copy object Total Memory:336429056 bytes Delete object Total Memory:319619072 bytes Create object Total Memory:336429056 bytes Copy object Total Memory:353239040 bytes Copy object Total Memory:370053120 bytes Copy object Total Memory:386867200 bytes Copy object Total Memory:403681280 bytes Copy object Total Memory:420495360 bytes Copy object Total Memory:437309440 bytes Copy object Total Memory:454119424 bytes Copy object Total Memory:470933504 bytes Copy object Total Memory:487747584 bytes Copy object Total Memory:504561664 bytes Copy object Total Memory:521375744 bytes Copy object Total Memory:538189824 bytes Copy object Total Memory:555003904 bytes Copy object Total Memory:571817984 bytes Copy object Total Memory:588632064 bytes Copy object Total Memory:605446144 bytes Copy object Total Memory:622260224 bytes Copy object Total Memory:639074304 bytes Copy object Total Memory:655888384 bytes Delete object Total Memory:639078400 bytes Delete object Total Memory:622268416 bytes Delete object Total Memory:605454336 bytes Delete object Total Memory:588640256 bytes Delete object Total Memory:571826176 bytes Delete object Total Memory:555016192 bytes Delete object Total Memory:538202112 bytes Delete object Total Memory:521388032 bytes Delete object Total Memory:504573952 bytes Delete object Total Memory:487759872 bytes Delete object Total Memory:470941696 bytes Delete object Total Memory:454127616 bytes Delete object Total Memory:437313536 bytes Delete object Total Memory:420503552 bytes Delete object Total Memory:403689472 bytes Delete object Total Memory:386875392 bytes Delete object Total Memory:370061312 bytes Delete object Total Memory:353243136 bytes Delete object Total Memory:336429056 bytes Copy object Total Memory:353243136 bytes Delete object Total Memory:336433152 bytes Delete object Total Memory:319614976 bytes Delete object Total Memory:302800896 bytes Delete object Total Memory:285986816 bytes Delete object Total Memory:269172736 bytes Delete object Total Memory:252358656 bytes Delete object Total Memory:235544576 bytes Delete object Total Memory:218726400 bytes Delete object Total Memory:201912320 bytes Delete object Total Memory:185098240 bytes Delete object Total Memory:168284160 bytes Delete object Total Memory:151470080 bytes Delete object Total Memory:134656000 bytes Delete object Total Memory:117841920 bytes Delete object Total Memory:101027840 bytes Delete object Total Memory:84213760 bytes Delete object Total Memory:67399680 bytes Delete object Total Memory:50585600 bytes Delete object Total Memory:33771520 bytes Delete object Total Memory:16953344 bytes Delete object Total Memory:135168 bytes Process time:2933ms Max memory needed:655888384 Total memory that need:335544300 Και με move constructor >Process time:1154ms Max memory needed:336412672 Total memory that need:335544300 Create object Total Memory:16834560 bytes Object moved Total Memory:16936960 bytes Object moved Total Memory:16936960 bytes Delete object Total Memory:16936960 bytes Create object Total Memory:33751040 bytes Object moved Total Memory:33751040 bytes Object moved Total Memory:33755136 bytes Delete object Total Memory:33755136 bytes Object moved Total Memory:33755136 bytes Object moved Total Memory:33755136 bytes Delete object Total Memory:33755136 bytes Create object Total Memory:50569216 bytes Object moved Total Memory:50569216 bytes Object moved Total Memory:50569216 bytes Object moved Total Memory:50569216 bytes Object moved Total Memory:50569216 bytes Delete object Total Memory:50569216 bytes Delete object Total Memory:50569216 bytes Object moved Total Memory:50569216 bytes Object moved Total Memory:50569216 bytes Delete object Total Memory:50569216 bytes Create object Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Delete object Total Memory:67383296 bytes Delete object Total Memory:67383296 bytes Delete object Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Object moved Total Memory:67383296 bytes Delete object Total Memory:67383296 bytes Create object Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Delete object Total Memory:84197376 bytes Delete object Total Memory:84197376 bytes Delete object Total Memory:84197376 bytes Delete object Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Object moved Total Memory:84197376 bytes Delete object Total Memory:84197376 bytes Create object Total Memory:101011456 bytes Object moved Total Memory:101011456 bytes Object moved Total Memory:101011456 bytes Delete object Total Memory:101011456 bytes Create object Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Delete object Total Memory:117825536 bytes Delete object Total Memory:117825536 bytes Delete object Total Memory:117825536 bytes Delete object Total Memory:117825536 bytes Delete object Total Memory:117825536 bytes Delete object Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Object moved Total Memory:117825536 bytes Delete object Total Memory:117825536 bytes Create object Total Memory:134639616 bytes Object moved Total Memory:134639616 bytes Object moved Total Memory:134639616 bytes Delete object Total Memory:134639616 bytes Create object Total Memory:151453696 bytes Object moved Total Memory:151453696 bytes Object moved Total Memory:151453696 bytes Delete object Total Memory:151453696 bytes Create object Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Object moved Total Memory:168267776 bytes Delete object Total Memory:168267776 bytes Create object Total Memory:185081856 bytes Object moved Total Memory:185081856 bytes Object moved Total Memory:185081856 bytes Delete object Total Memory:185081856 bytes Create object Total Memory:201895936 bytes Object moved Total Memory:201895936 bytes Object moved Total Memory:201895936 bytes Delete object Total Memory:201895936 bytes Create object Total Memory:218710016 bytes Object moved Total Memory:218710016 bytes Object moved Total Memory:218710016 bytes Delete object Total Memory:218710016 bytes Create object Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Object moved Total Memory:235524096 bytes Delete object Total Memory:235524096 bytes Create object Total Memory:252338176 bytes Object moved Total Memory:252338176 bytes Object moved Total Memory:252338176 bytes Delete object Total Memory:252338176 bytes Create object Total Memory:269152256 bytes Object moved Total Memory:269152256 bytes Object moved Total Memory:269152256 bytes Delete object Total Memory:269152256 bytes Create object Total Memory:285970432 bytes Object moved Total Memory:285970432 bytes Object moved Total Memory:285970432 bytes Delete object Total Memory:285970432 bytes Create object Total Memory:302784512 bytes Object moved Total Memory:302784512 bytes Object moved Total Memory:302784512 bytes Delete object Total Memory:302784512 bytes Create object Total Memory:319598592 bytes Object moved Total Memory:319598592 bytes Object moved Total Memory:319598592 bytes Delete object Total Memory:319598592 bytes Create object Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Object moved Total Memory:336412672 bytes Delete object Total Memory:336412672 bytes Delete object Total Memory:319610880 bytes Delete object Total Memory:302796800 bytes Delete object Total Memory:285982720 bytes Delete object Total Memory:269168640 bytes Delete object Total Memory:252354560 bytes Delete object Total Memory:235540480 bytes Delete object Total Memory:218726400 bytes Delete object Total Memory:201912320 bytes Delete object Total Memory:185098240 bytes Delete object Total Memory:168284160 bytes Delete object Total Memory:151470080 bytes Delete object Total Memory:134656000 bytes Delete object Total Memory:117841920 bytes Delete object Total Memory:101027840 bytes Delete object Total Memory:84213760 bytes Delete object Total Memory:67395584 bytes Delete object Total Memory:50581504 bytes Delete object Total Memory:33767424 bytes Delete object Total Memory:16953344 bytes Delete object Total Memory:135168 bytes Process time:1154ms Max memory needed:336412672 Total memory that need:335544300 Max memory needed ειναι η μεγιστη μνημη που πηρε το προγραμμα για να εκτελεστει Total memory that need ειναι η μεγιστη που μου χρειαζεται πραγματικα το προγραμματακι >#include <vector> #include <time.h> #include <algorithm> #pragma comment(lib,"Psapi.lib") using namespace std; #define USE_MOVE FALSE int objectsize = 0x00ffffff; int objectcount = 20; int appsize=0; int max_total = 0; int total() { PROCESS_MEMORY_COUNTERS pi; pi.cb = sizeof(pi); GetProcessMemoryInfo(GetCurrentProcess(),&pi,sizeof(pi)); max_total = max(max_total,pi.WorkingSetSize-appsize); return pi.WorkingSetSize-appsize; } void inittotal() { appsize = total(); } class cls { char* bytes; size_t size; public: // destructor ~cls() { if(bytes != NULL) delete[] bytes; size = 0; cout<<"Delete object"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; } // constructs cls() : bytes(NULL),size(0) { cout<<"Create Defualt"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; } cls(size_t size) : bytes(new char[size]),size(size) { cout<<"Create object"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; } cls(cls& c) { bytes = new char[c.size]; memcpy(bytes,c.bytes,c.size); size = c.size; cout<<"Copy object"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; } #if USE_MOVE cls(cls&& c) { *this = std::move(c); cout<<"Object moved"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; } #endif //operators cls& operator=(cls& c) { bytes = new char[c.size]; memcpy(bytes,c.bytes,c.size); size = c.size; cout<<"Copy object"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; return *this; } #if USE_MOVE cls& operator=(cls&& c) { bytes = c.bytes; size = c.size; c.bytes = 0; c.size = 0; cout<<"Object moved"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; return *this; } #endif }; int _tmain(int argc, _TCHAR* argv[]) { clock_t t = clock(); inittotal(); { vector<cls> c; for(int i = 0 ; i< objectcount;++i) c.push_back(cls(objectsize)); } cout<<"Process time:"<<clock()-t<<"ms"<<endl; cout<<"Max memory needed:"<<max_total<<endl; cout<<"Total memory that need:"<<objectsize*objectcount<<endl; return 0; } Οποιος ενδιαφερεται για αυτο το "θαυμα" ας ριξει μια ματια εδω και εδω και εκει
jstark Δημοσ. 18 Δεκεμβρίου 2010 Δημοσ. 18 Δεκεμβρίου 2010 Θαύμα θα ήταν αν υπηρχαν απο τώρα compilers που να υποστηριζουν 100% στο νεο ISO, και αν αυτή τη στιγμη που μιλάμε τα προγράμματά μας δεν είχαν πρόβλημα με compile σε όλα τα μηχανήματα με το τωρινό ISO. Κρίνοντας από το τί γίνεται ως τώρα, ίσως σε 5 χρόνια όλα αυτά (τα πολύ σημαντικά, όπως move ctors και lambda funs, κλπ) να ειναι tractable. Πάντως, έστω και ως τεστ, το αποτέλεσμα του move φαίνεται πολύ καλό.
nplatis Δημοσ. 20 Δεκεμβρίου 2010 Δημοσ. 20 Δεκεμβρίου 2010 Πολύ ενδιαφέρουσα η σύγκριση. Όμως ο κώδικάς σου έχει δυο μικρά λάθη: 1) Ο copy constructor δέχεται συνήθως την παράμετρο ως const &, δηλαδή θα ήταν: >cls(const cls& c) 2) [Και σημαντικότερο] Στους operator= πρέπει να διαγράφεις τη μνήμη που έχεις δυναμικά δεσμεύσει, αλλιώς μένει ξεκρέμαστη, και επίσης πρέπει να ελέγχεις αν αντιγράφεις τον εαυτό σου, οπότε δεν χρειάζεται να κάνεις τίποτα. Δηλαδή θα ήταν > //operators cls& operator=(const cls& c) { if (this != &c) { delete[] bytes; bytes = new char[c.size]; memcpy(bytes,c.bytes,c.size); size = c.size; cout<<"Copy object"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; } return *this; } #if USE_MOVE cls& operator=(cls&& c) { if (this != &c) { delete[] bytes; bytes = c.bytes; size = c.size; c.bytes = 0; c.size = 0; cout<<"Object moved"<<"\t\t Total Memory:"<<total()<<" bytes"<<endl; } return *this; } #endif Αυτά εξηγούνται εξίσου καλά εδώ.
dop Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 Θαύμα θα ήταν αν υπηρχαν απο τώρα compilers που να υποστηριζουν 100% στο νεο ISO, και αν αυτή τη στιγμη που μιλάμε τα προγράμματά μας δεν είχαν πρόβλημα με compile σε όλα τα μηχανήματα με το τωρινό ISO. Κρίνοντας από το τί γίνεται ως τώρα, ίσως σε 5 χρόνια όλα αυτά (τα πολύ σημαντικά, όπως move ctors και lambda funs, κλπ) να ειναι tractable. Πάντως, έστω και ως τεστ, το αποτέλεσμα του move φαίνεται πολύ καλό. Υπάρχει μερική υποστήριξη στο C++0x, κυρίως επειδή δεν είναι ακόμα standard: http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport @Evgenios1: υποθέτω το έλεγξες με όλα τα optimizations και σε διαφορετικούς compilers? Κυρίως γιατί την πλεινότητα των περιπτώσεων την καλύπτουν τα Return Value Optimization (http://en.wikipedia.org/wiki/Return_value_optimization) και το Copy Elision (http://en.wikipedia.org/wiki/Copy_elision)
Evgenios1 Δημοσ. 21 Δεκεμβρίου 2010 Μέλος Δημοσ. 21 Δεκεμβρίου 2010 Υπάρχει μερική υποστήριξη στο C++0x, κυρίως επειδή δεν είναι ακόμα standard: http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport @Evgenios1: υποθέτω το έλεγξες με όλα τα optimizations και σε διαφορετικούς compilers? Κυρίως γιατί την πλεινότητα των περιπτώσεων την καλύπτουν τα Return Value Optimization (http://en.wikipedia.org/wiki/Return_value_optimization) και το Copy Elision (http://en.wikipedia.org/wiki/Copy_elision) Βασικα αυτο που εγραψα εχει να κανει με την "μετακινηση" ενους object απο τη θεση χ στη θεση ψ χωρις γινει copy, με αποτελεσμα να μην εχεις δυο object αλλα μονο ενα. πχ >class test { void* data; int len; public: test() { data= 0; len =0; } ~test() { if(data!=0) delete[] data; } test(int i) { data = new char[i]; len =i; } void move(test& t) { t.data = data; t.len = len; data = 0; len =0; } void copy(test& t) { t.data = new char[t.len]; memcpy(t.data,data,len); t.len = len; } void print() { cout<<"Object:"<<this<<" Inner object:"<<data<<endl; } }; int _tmain(int argc, _TCHAR* argv[]) { test t1,t2; { test st1(20),st2(34); st1.copy(t1);// t1 ειναι ενα αντιγραφο st2.move(t2);// t2 ειναι το st2 }//destruct st1,st2 note: το st2 ειναι κατεστραμενο t1.print(); t2.print(); return 0; }
dop Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 Και αυτά που έγραψα εγώ το ίδιο κάνουν. Ξέρω τι κάνουν τα move semantics, απλά αυτό που λέω είναι ότι στις περισσότερες σημαντικές περιπτώσεις οι compilers κατάφερναν να αποφύγουν επιπλέον copies. Δεν αντιλέγω για την χρησιμότητα των move semantics (ίσως το μόνον που δε μπορείς να κάνεις χωρίς αυτά είναι ένα vector από non-copy constructable αντικείμενα) απλά για θέματα optimization, ήδη ο compiler κάνει πολλά προς αυτή τη κατεύθυνση.
Evgenios1 Δημοσ. 21 Δεκεμβρίου 2010 Μέλος Δημοσ. 21 Δεκεμβρίου 2010 Τι να πω, απο optimization δεν ξερω (μονο inline τπτ αλλο). Απλως μου αρεσε η ιδεα του move constructor
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.