Avatar billede krismort Nybegynder
05. marts 2008 - 11:21 Der er 1 løsning

hvad er forskellen på disse ?

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 ?
Avatar billede segmose Nybegynder
05. marts 2008 - 12:17 #1
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester