Dynamische Speicherverwaltung.
-
Hallo,
ich habe eine große Bitte, ich beschäftige mich derzeit mit der Dynamischen
Speicherverwaltung. Jedoch ist mir nicht klar wozu diese eigentlich gut ist,
da in den Tutorials und Büchern keine Gegenbeispiele aufgeführt sind die einen
Vergleich bieten wie ein Programm ohne und das selbe Programm mit Dyn.
Speicherverwaltung funktioniert.Darum meine Bitte wäre es möglich mir solch ein Programm aufzulisten, eines
ohne und dann das selbe mit Dyn. Speicherverwaltung, um das ganze Thema etwas
verständlicher zu machen (Bitte kein Experten-Programm)?Vielen, vielen Dank im voraus!
Grüße,
Tutorialfresser
-
Ohne dynamische Speicherverwaltung mußt du bereits beim Compilieren wissen, wieviel Platz du benötigen wirst. Das heißt, du mußt dir eventuell eine (willkürliche) Maximalgrenze setzen, bis wohin dein Programm durchhalten kann.
(und wenn dir später auffällt, daß dieser Wert nicht reicht, mußt du neu compilieren)Mit dynamischem Speicher kannst du zur Laufzeit festlegen, wieviel Speicher das Programm tatsächlich anfordern will. Da reicht z.B. eine Abfrage am Programmanfang und anschließend holt sich das Programm so viel Speicher, wie benötigt wird.
-
TutorialFresser schrieb:
Darum meine Bitte wäre es möglich mir solch ein Programm aufzulisten, eines
ohne und dann das selbe mit Dyn. Speicherverwaltung, um das ganze Thema etwas
verständlicher zu machen (Bitte kein Experten-Programm)?ohne:
... unsigned char a[256]; unsigned int n; printf ("wieviel speicher brauchst du? :"); scanf ("%d", &n); if (n > sizeof(a)) printf ("pech gehabt\n"); else { // speicher nutzen a[0...n-1] = ... } ...
mit:
... unsigned char *a; unsigned int n; printf ("wieviel speicher brauchst du? :"); scanf ("%d", &n); a = malloc(n); if (a == 0) printf ("pech gehabt\n"); else { // speicher nutzen a[0...n-1] = ... } ...
-
Brauchst du wenn du z.B die Determinante einer Matrix berechnen willst und du aber die Anzahl der Spalten und Zeilen am Anfang noch nicht weißt!
Weil
int iMatrix[i][j]
geht nicht!!! Müssen immer fixe Werte sein!
Deshalb:
p_iPointer=(int*)malloc(i*j*sizeof(int));
Nur um ein Beispiel zu posten!
-
Mini1982 schrieb:
int iMatrix[i][j]
geht nicht!!! Müssen immer fixe Werte sein!
dann machstes eben mit
int Matrix[10000];
reicht für 'ne 100*100 matrix. soviel elemente will bestimmt keiner reinhacken
-
Ja, aber das kostet unnötigen Speicherplatz!!!
Und will ja nur Bsp für DMA angeben!
-
z.B: folgende Aufgabstellung:
Erstellen Sie ein Programm mit dem Namen "UE5". Schreiben Sie ein Programm, das eine n x m Matrix wie folgt behandelt.
Über ein Menü sollen folgende Schritte durchgeführt werden:1.)Eingabe von n und m
2.)Die Werte Zeilenweise eingeben. Den kleinsten Wert in jeder Zeile finden
3.)BeendenMeine Lösung: Aber ohne "Den kleinsten Wert finden!!!!
#include <stdio.h> #include <stdlib.h> #include <malloc.h> void main(void) { int iAuswahl; int iZeile=3,iSpalte=3; double *p_dPointer; double dAdresse; int i,j; printf("--------Matrizenprgramm----------\n"); printf("[1] Eingabe der Spalten und Zeilen \n"); printf("[2] Werte zeilenweise eingeben \n"); printf("[3] Beenden \n"); printf("Ihre Auswahl: \n"); scanf("%d",&iAuswahl); while (iAuswahl<=2 && iAuswahl>=1) { switch(iAuswahl) { case 1: printf("Wieviel Zeilen hat Ihre Matrix: \n"); scanf("%d",&iZeile); printf("Wieviel Spalten hat Ihre Matrix: \n"); scanf("%d",&iSpalte); p_dPointer=(double*)malloc(iZeile*iSpalte*sizeof(double)); break; case 2: for (i=0;i<iZeile;i++) { for(j=0;j<iSpalte;j++) { printf("Geben Sie bitte den Wert der %d.Zeile und der %d.Spalte ein: \n",i+1,j+1); scanf("%lf",&dAdresse); *(p_dPointer+2*i+j)=dAdresse; } } break; } printf("--------Matrizenprgramm----------\n"); printf("[1] Eingabe der Spalten und Zeilen \n"); printf("[2] Werte zeilenweise eingeben \n"); printf("[3] Beenden \n"); printf("Ihre Auswahl: \n"); scanf("%d",&iAuswahl); } // Überprüfung printf("%lf",*(p_dPointer+1)); free(p_dPointer); }
-
Mini1982 schrieb:
Ja, aber das kostet unnötigen Speicherplatz!!!
Und will ja nur Bsp für DMA angeben!okay, aber DMA ist nun wieder was völlig anderes
btw: ich bin ja der meinung bei kleinen bis mittleren progrämmchen kommt man immer ohne dynamic memory aus. erst bei fetten sachen, so aber der grösse eines betriebssystems, isses unverzichtbar damit nicht die meiste zeit viel speicher ungenutzt bleibt.
-
Sicher, da hast eh recht!
Die Wahrscheinlichkeit das es zu Speicherengpässen kommmt
ist gering, aber es ist halt "professioneller" programmiert.
Und wenn man bei einer Klausur DMA anwenden muss bleibt einem
auch nichts anderes übrig!@net DMA = Dynamische Speicherverwaltung!!!!!!!!!!!!!!!!
DMA=Dynamic Memory Allocation= Dynamische Speicherverwaltung!!!!
Und somit nicht "völlig etwas anderes"!!!
-
Mini1982 schrieb:
@net DMA = Dynamische Speicherverwaltung!!!!!!!!!!!!!!!!
DMA=Dynamic Memory Allocation= Dynamische Speicherverwaltung!!!!
Und somit nicht "völlig etwas anderes"!!!dann gib' doch mal bei google 'DMA' ein...
-
also ich glaube offiziell ist 'dma' mit 'direct memory adressing' definiert
-
Vielleicht meinte net mit DMA Direct Memory Access...!?
EDIT: Zu langsam...
-
Anzi-C schrieb:
Vielleicht meinte net mit DMA Direct Memory Access...!?
so isses
und wickypädia hat auch noch andere kürzel in petto: http://de.wikipedia.org/wiki/Dma
aber kein 'malloc' o.ä.
aber guckt bloss nicht da hin: http://en.wikipedia.org/wiki/Dma