webForumDet fria alternativet

När skall man använda static eller inte static?

Programmering

8 svar · 742 visningar · startad av Nickemannen

Medlem sedan aug. 20003 575 inlägg
Frågan#1

Kom in på det idag.
När skall man använda static och inte.
Fick lite info från en idag om att om man använder static så läggs funktionen i minnet och är där hela tiden medans programmet är igång.
Men om skapar objekt så läggs den ju bara i minnet tills du förstör den.

Alltså om man skall använda funktionen mycket nästan hela tiden så skall man låta den vara static annars inte. Det tycker jag låter mest logiskt. Men om någon vet något att lägga till eller jag har fel på så gör gärna det detta är en hypotes från min sida.

Medlem sedan mars 20007 896 inlägg
#2

Njä, det är ju inte enbart därför man använder statiska metoder/fält. Fördelen är ju också att man inte behöver skapa instanser av en klass, eller att man kan returnera en statisk instans av en klass med privat konstruktor, t.ex.

Medlem sedan aug. 20003 575 inlägg
#3

ja, det är ju det men borde inte static äta mer minne än vad om man skapade instanser av klasser hela tiden ?

Finns det några exempel då man inte skall använda static och när man skall använda static ?

Medlem sedan dec. 20003 887 inlägg
#4

Du kan (om du inte redan gjort det) läsa mer om static (under Remarks).

Medlem sedan aug. 20003 575 inlägg
#5

Nu har jag gjort det. Kände att det inte riktigt var tillräckligt.

Medlem sedan dec. 20003 887 inlägg
#6

Tja... använd inte static för en variabel/funktion om du inte vet att du måste återanvända den ofta.

Lokala variabler är vad du ska använda om variablen endast behöver kännas till temporärt av funktionen.

Det beror till största del av vad du ska använda din funktion till.

Medlem sedan juni 20022 599 inlägg
#7

Nickemannen skrev:

Fick lite info från en idag om att om man använder static så läggs funktionen i minnet och är där hela tiden medans programmet är igång.
Men om skapar objekt så läggs den ju bara i minnet tills du förstör den.

Känns lite som en "äpplen och päron"-diskussion. Static är ett nyckelord/begrepp i vissa objektorienterade språk. Hur den fysiska hantering av minnet sen sker är nog helt upp till varje miljö/run-time/tolk.

Men man kan ju gissa att det normalt sker så här:

Icke-statisk medlemsvariabel -> Varje objekt får sin egen kopia av variabeln vilke normalt kräver mer minne än en statisk medlemsvariabel som delas av alla instanser. (Utom när man har exakt 0 objekt.)

Icke-statisk metod -> Eftersom exekverbar kod är read-only så kommer metoden/funktionen bara att laddas en gång i minnet och alla instanser dela samma minnesområde (via nåt pekartjafs). Det skulle vara fånigt att ladda samma funktion på 100 olika ställen i minnet bara för att man har 100 objekt.

Medlem sedan aug. 20003 575 inlägg
#8

Tackar för svaren.

Vet ni några sidor jag kan läsa mer om detta ?
Jag har sökt men antagligen inte sökt rätt.

Medlem sedan juni 200010 432 inlägg
#9

I vilken OO- tillämpning vi än pratar om så går det inte åt mer minne - snarare tvärtom, men däremot kan man tänka sig att man torskar lite prestanda eftersom den blir satt som global och det genererar ju mer blockbyten för cacheminnet under runtime. Jag tror inte det är nån skillnad på kod som körs i en VM eller kod som är kompilerad till maskinspråk, ur det hänseendet. Fast det är ju då endast en optimeringsdetalj och som vanligt får man välja mellan att spara minne och eller spara prestanda.

'static' används även i c för att hålla kvar ett värde på en variabel trots att funktionen terminerat (som en privat global), samt till funktioner för att göra dem lokala.

257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)