Hvad er forskellen på disse to måder at initializerer et member object på ?
class Member { public: }; class A { public: Member member; }; class B { public: B() { member = new Member(); } ~B() { delete member; } Member* member; };
Vil der være forskel på hvor datanen bliver lagt i hukommelsen ?
Kan man opnå en optimering hvis man skal allokerer mange instanser af A eller B ved at vælge en af metoderne ?
Den kan være forskel på hvor de bliver lagt. Metode A sørger for at dine data ligger tæt på hinanden og derved giver dig en fordel i lokalitet, forudsat at du sørger for at allokere dine A'er sammen
A aer[10000]; // her vil du være sikker på at de ligger ved siden af hinanden. og ikke A *aer[10000]; for (int i= 0; i<10000;++i) aer[i] = new A;
Ved B kan man være heldig at Member bliver placeret lige efter B men så har man ikke rigtigt vundet noget iforhold til A.
for under 100 stk kan det vel være lige meget. Undgå for meget pointer jagt i dine strukturer og classes det ødelægger cache og bruger for meget ram båndbredde.
int find(B* b, int hvad) { while (b && b->member.val != hvad) { if (b->member.val < hvad) b = b->member.less; else b = b->member.more; } return b; }
Er en god måde at ødelægge performance.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.