Avatar billede tokelil Nybegynder
20. august 2001 - 00:08 Der er 5 kommentarer og
3 løsninger

Overhead ved brug af variabler i events og functioner?

Når man ”opretter” en variabel må der være noget overhead involveret… Så hvordan undgår man at man at en variabel bliver ”oprettet” hver gang en function bliver kaldt ? fungerer static så dette ikke sker ? (Går jeg ud fra, men vil gerne være sikker!)

F.eks: vil i kun blive oprettet første gang MyFunc bliver kaldt ???

void MyFunc()
{
  static int i;
  i = 0;
  do something…
}

Og hvad med nedlæggelsen af en static variabel ?
Avatar billede morten2 Nybegynder
20. august 2001 - 01:48 #1
Ja hvis du bruger static så oprettes variablen første gang functionen kaldes og den nedlægges først når dit program terminere.

Meen jeg tror nu ikke du opnår noget som helst ved det. Faktisk kunne man forestille sig det modsatte. Hvis variablen ikke er static kan den oprettes som register variabel. Dev ingen overheead og meget hurtig access. Hvis den er static vil den ikke blive oprettet som register variable.

Avatar billede mtilsted Nybegynder
20. august 2001 - 05:23 #2
Simple variable som int og char bliver ikke opretted. Det er kun objecter der bliver opretted.
Avatar billede fri-hash Nybegynder
20. august 2001 - 10:10 #3
hvorfor er du interesseret i at den kun oprettes første gang?? den sættes til 0 umiddelbart efter, så hvorfor ikke udelade static og derved eksisterer variablen kun sålænge MyFunc() \"kører\" og nedlægges når MyFunc() slutter, derved spares memoryplads når MyFunc() ikke er i brug
Avatar billede morten2 Nybegynder
20. august 2001 - 12:07 #4
mrilsted: Hvis en simpel variabel ikke bliver oprettet hvor er så den data man senere skriver til den :-)
Den har naturligvis ikke ctor som bliver kaldt og andet OO overhead. Men den bliver trods alt oprettet.

fri-hash: spare 4 byte memory :-) Hvis nu han kalder funktionen 1 milliard gange så er det vel vær at overveje hvad der er af overhead m.h.t. variable oprettelse.
Avatar billede tokelil Nybegynder
20. august 2001 - 13:25 #5
Tak for svarene!

Jeg vidste ikke at simple variabler bliver oprettet som registre når de kaldes som funktioner.

Jeg ville bare lige høre om det var en fordel at oprette den som static når nu jeg har en function som bliver kaldt stort set hele tiden i mit program. Men det lyder ikke til at der er noget at hente ved den slags operationer.
Avatar billede morten2 Nybegynder
20. august 2001 - 13:33 #6
Prøv evnt at køre en profiler med og uden static vars. Det vil vise dig forskellen.
Avatar billede tokelil Nybegynder
20. august 2001 - 13:39 #7
En profiler ? Kender jeg vidst ikke til... :-(
Avatar billede mtilsted Nybegynder
20. august 2001 - 14:10 #8
morten2: De vil enten vaere i cpu\'ens registre eller paa stacken.

At lave din variable til static vil faktisk kunne gøre din code langsommere da det vil mindske compilerens muligheder for at optimere din code. Desuden(Afhænig af cpu/memmory mode) kan access til statiske data ogsaa vaere langsommere end normale variable.
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