William Sandqvist C:s minnesmodell.

Slides:



Advertisements
Liknande presentationer
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Advertisements

void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Arrays Indicerade variabler.
Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack
Föreläsning 4 Python: mera om funktioner och parametrar
C-programmering ID120V William Sandqvist Länkad lista
Polymorfism.
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
William Sandqvist Funktion som byter plats på två variabler /* swap1.c first attempt at a swaping function */ /* from Stephen Prata, C Primer.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
INTRODUKTION TILL PROGRAMMERING
Programmering i C# 9. Pekare och osäker kod.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Föreläsning 4 Klasser Och Objekt.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Anders Sjögren Deklarationsområde och funktioner.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Kronljusströmställaren 0, 1, 2, 3
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Datorteknik övning 4 Maskinnära programmering med C inför hemlab 1
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
1 IS1200 Datorteknik, övning 4 Maskinnära programmering med C Förberedelser till hemlaboration 1.
William Sandqvist Datorteknik övning 4 Maskinnära programmering med C inför hemlab 1.
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts. Den här bilden känner ni igen sedan tidigare. Vi skall fortsätta att prata variabeltyper.
Språket för inbyggda system. C:s verktygslåda är välfylld! William Sandqvist
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Programmeringteknik Webbdelen 2. webbprogrammering Server Den dator som websidan ligger på Klient Dator som tittar på webbsidan med en webbläsare (t ex.
Anders Sjögren Funktioner något in och något annat ut.
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
Presentationens avskrift:

William Sandqvist C:s minnesmodell

William Sandqvist C:s minnemodell – var hamnar variabler? #include int a = 17; int main( void ) { int b = 18; int * c; c = malloc( sizeof ( int ) ); *c = 19; printf("a = %d at address %x\n", a, &a); printf("b = %d at address %x\n", b, &b); printf("c = %d at address %x\n", *c, c); free(c); system("PAUSE"); return 0; } Global variabel = Data segmentet Automatisk variabel = Stack Dynamisk variabel = Heap Återställ dynamiskt minne!

William Sandqvist Data-segmentet ”Globala” variabler, dvs variabler som deklarerats utanför programmets funktioner hamnar i datasegmentet. Initialiserade variabler förses med sina startvärden. Oinitialiserade variabler placeras för sig (.bss ), de kan då enkelt åtminstone 0-ställas. I datasegmentet kan också konstanter och strängkonstanter lagras. Datasegmentet är statiskt, variablerna upptar plats under hela programkörningen både när de används och när de inte används. Nackdelen med de globala variablerna är att de kan nås från alla funktioner. De kan vara både parametrar och returvärden på en och samma gång för alla funktioner som använder dem – på ett oöverskådligt sätt – som gjort för problem!

William Sandqvist Stacken När en funktion anropas så skapas en aktivitetspost på stacken. Den består av utrymme för funktionens parametrar och returvärde, samt de variabler som deklareras inuti funktionen ( = lokala variabler ). Nios-II är en registerrik processor och då ligger en del parametrar (upp till 4 st) och returvärdet i register. När en funktion avslutas så tas aktivitetsposten bort från stacken.

William Sandqvist Stacken När en funktion anropas så skapas en aktivitetspost på stacken. Den består av utrymme för funktionens parametrar och returvärde, samt de variabler som deklareras inuti funktionen ( = lokala variabler ). Nios-II är en registerrik processor och då ligger en del parametrar (upp till 4 st) och returvärdet i register. När en funktion avslutas så tas aktivitetsposten bort från stacken. Funktionen main() är speciell genom att den avslutas först när hela programmet kört klart. Dess aktivitetspost ligger kvar under programkörningen. main() aktivitetspost

William Sandqvist Automatiska variabler main() aktivitetspost main() anropar funktionen funk1(). En ny aktivitetspost skapas nu på stacken för den funktionens variabler.

William Sandqvist Automatiska variabler main() aktivitetspost main() anropar funktionen funk1(). En ny aktivitetspost skapas nu på stacken för den funktionens variabler.

William Sandqvist Automatiska variabler main() aktivitetspost main() anropar funktionen funk1(). En ny aktivitetspost skapas nu på stacken för den funktionens variabler. När funktionen kört klart returnerar den till main() och aktivitetposten tas bort.

William Sandqvist Automatiska variabler main() aktivitetspost main() anropar funktionen funk1(). En ny aktivitetspost skapas nu på stacken för den funktionens variabler. När funktionen kört klart returnerar den till main() och aktivitetposten tas bort. Nu anropas en annan funktion funk2(). Den funktionens aktivitetspost kan nu utnyttja samma minne på stacken. funk2()

William Sandqvist Automatiska variabler main() aktivitetspost main() anropar funktionen funk1(). En ny aktivitetspost skapas nu på stacken för den funktionens variabler. När funktionen kört klart returnerar den till main() och aktivitetposten tas bort. Funktionernas variabler på stacken kallas för automatiska variabler. Minnesutrymmet på stacken återanvänds av funktionerna och utnyttjas därmed effektivt. Nu anropas en annan funktion funk2(). Den funktionens aktivitetspost kan nu utnyttja samma minne på stacken. funk2()

William Sandqvist En funktion som genererar data Antag att funktionen funk2() genererar data och lagrar dessa i en lokal array[] på stacken.

William Sandqvist En funktion som genererar data array[] Antag att funktionen funk2() genererar data och lagrar dessa i en lokal array[] på stacken.

William Sandqvist En funktion som genererar data array[] Antag att funktionen funk2() genererar data och lagrar dessa i en lokal array[] på stacken. Funktionen returnerar arrayens adress till main(), med hjälp av adressen kan main() nå och använda datat.

William Sandqvist En funktion som genererar data Antag att funktionen funk2() genererar data och lagrar dessa i en lokal array[] på stacken. Funktionen returnerar arrayens adress till main(), med hjälp av adressen kan main() nå och använda datat. array[]

William Sandqvist En funktion som genererar data array[] Antag att funktionen funk2() genererar data och lagrar dessa i en lokal array[] på stacken. Datat på stacken lever farligt! Om en ny funktion, funk3(), körs så skrivs datat över. Funktionen returnerar arrayens adress till main(), med hjälp av adressen kan main() nå och använda datat. array[] funk3()

William Sandqvist En funktion som genererar data array[] Antag att funktionen funk2() genererar data och lagrar dessa i en lokal array[] på stacken. Datat på stacken lever farligt! Om en ny funktion, funk3(), körs så skrivs datat över. Det behövs någon annan plats för datat. – Var skulle det kunna vara? Funktionen returnerar arrayens adress till main(), med hjälp av adressen kan main() nå och använda datat. array[] funk3()

William Sandqvist Heapen funk2() Funktionen funk2() behöver lagra sina data någon annanstans.

William Sandqvist Heapen array[] funk2() Funktionen funk2() behöver lagra sina data någon annanstans. Den kan anropa C:s funktion malloc() för att få utrymme på heapen.

William Sandqvist Heapen array[] Funktionen funk2() behöver lagra sina data någon annanstans. Den kan anropa C:s funktion malloc() för att få utrymme på heapen. funk2() returnerar nu arrayens adress till main().

William Sandqvist Heapen array[] funk2() Funktionen funk2() behöver lagra sina data någon annanstans. Den kan anropa C:s funktion malloc() för att få utrymme på heapen. funk2() returnerar nu arrayens adress till main(). Datat finns fortfarande kvar om en ny funktion funk3() ska köra. funk3()

William Sandqvist Heapen array[] funk2() Funktionen funk2() behöver lagra sina data någon annanstans. Den kan anropa C:s funktion malloc() för att få utrymme på heapen. funk2() returnerar nu arrayens adress till main(). Datat finns fortfarande kvar om en ny funktion funk3() ska köra. Minnesutrymmet frigörs när man anropar funktionen free(). free() funk3()

William Sandqvist Heapen funk2() Funktionen funk2() behöver lagra sina data någon annanstans. Den kan anropa C:s funktion malloc() för att få utrymme på heapen. funk2() returnerar nu arrayens adress till main(). Datat finns fortfarande kvar om en ny funktion funk3() ska köra. Minnesutrymmet frigörs när man anropar funktionen free(). Om C:s minneshanterare är bra skriven utnyttjas minnesutrymmet på heapen effektivt. funk3()

William Sandqvist