aha okej,
För inte alls så länge sedan så var det alltid upp till programmeraren att sköta hanteringen av arbetsminnet på datorn. Det går till så att om jag vill räkna ihop 1+1 så måste jag spara resultatet om jag vill använda det senare. Jag behöver då berätta att det är en siffra samt peka ut en plats i ramminnet där siffran skall sparas.
För det första behöver jag veta om platsen är ledig och sedan allokerar jag så mycket plats jag tror att siffran kommer att ta i anspråk. En standard integer (heltal) på 8bit kan innehålla tal upp till 256, 16bit upp till 65 536 osv. Sedan finns det såklart andra typer om jag förväntar mig decimaler eller ren text med mera.
Vill jag optimera mitt programs minnesanvändning kör jag alltså med den minsta möjliga storleken på mina typer, det är ju onödigt att spara talet 45 i en 32-bitars int som kan hålla tal upp till 4 miljarder. I mitt program kommer jag att skapa en pekare som pekar på området i minnet där mitt tal ligger så att varje gång jag behöver det använder jag pekaren. När jag är säker på att talet inte längre behövs förstör jag pekaren så att jag eller något annat program kan ta över den platsen i minnet och spara något annat där.
När man jobbar med pekare på objekt på det sättet kallas det objektorienterad programmering.
Nuförtiden i många nya programmeringsspråk är programmeraren nästan frikopplad från pekarna på det sättet att vi inte längre behöver förstöra dem. Vi måste fortfarande deklarera dem i koden men vi behöver inte bry oss om var de hamnar eller när de skall förstöras. Anledningen till det är att våra program körs av ett annat program som kallas för vm (virtual machine). Java är ett bra exempel på det, där behöver inte programmeraren ta hänsyn till vilken typ av cpu som kommer att köra programmet jvm tar hand om det. Vidare så förstör din vm pekarna åt dig när de inte längre kommer att anropas i koden och det är det vi kallar för garbagecollector. Den städar helt enkelt minnet kan man säga.
Fördelen med detta förutom att det blir färre kodrader och mindre bekymmer för programmerare är att du kan använda samma kodspråk på olika plattformar. Installera java på windows macosx eller linux och programmeraren behöver inte bry sig, bara skriva javakod och strunta i kompabiliteten. VM kör ditt program och bygger om koden till något som är kompitabelt med ditt system. Detta görs i runtime, alltså när programmet körs.
Det är därför du måste ha JavaVM installerat på datorn för att kunna köra javaprogram eller uppdatera .NET Framework på din windowsburk för de senaste windowsprogrammen. Windows VM som tar hand om runtime heter CLR, Common Language Runtime. I Android heter vm ART vilket står för Android Runtime och det är en modifierad java vm. Vi bygger ju androidappar i javakod som du kanske vet.
Anledningen till att programspråk som c++, där man fortfarande sköter minneshanteringen själv, fortfarande är så populära är att där kompilerar koden ner till maskinnivå och kan exekveras snabbare av cpu:n eftersom det inte finns ett mellanlager, ingen VM. Det gör ditt program snabbare helt enkelt. Stora program som spel är oftast kodade maskinnära därför att prestandan man vinner där är märkbar.
Det microsoft gjort nu med den nya platformen är att dina mobilappar kommer att kompilera ned till maskinnära kod som exekveras väldigt snabbt men programmerarna behöver ändå inte ta hand om minnet därför att garbagecollectorn är inkluderad i ditt program. Så städningen sker ändå även fast det inte finns något program som kör ditt program så att säga. Jag tycker det är skitballt
Continuum är att du kan ansluta tangentbord, mus och skärm till telefonen. Apparna du skriver för w10mobile har även ett flertal former. Dvs en för mobilstorlek, en för surplattestorlek och en för stora skärmar. Innehållet i appen anpassas efter skärmstorlek. Om du ansluter telefonen till en skärm så får du fram ett skrivbord som ser ut precis som windows 10 gör. Du har startmeny och hela paketet men det är telefonen du kör allting från.
Continuum;
Click to expand...