Dynamische Speicherallozierung in C |
Was ist dynamische Speicherallozierung?
|
Dynamische Speicherallozierung wird als die dynamisch Verteilung des Raumes f�r Variablen an der Laufzeit definiert.
Es ist kostspielig beim Besch�ftigen Reihe Art Strukturen, Raum soviel zuzuteilen, wenn es erkl�rt wird
|
F�nf ANSI Standartd Funktion verwendet in der dynamischen Speicherallozierung
|
ANSI C liefert f�nf Standardfunktionen, die dir helfen, Ged�chtnis auf dem Haufen zuzuteilen, die sind, wie folgt:
- sizeof()
- malloc()
- calloc()
- realloc()
- free()
|
Die folgende Tabelle beschreiben die f�nf unterschiedlichen Standardfunktionen, denen Hilfen du Ged�chtnis dynamisch zuteilen
|
Function |
Task |
sizeof |
The sizeof() function returns the memory size of the requested variable |
malloc |
Allocates memory requests size of bytes and returns a pointer to the Ist byte of
allocated space |
calloc |
Allocates space for an array of elements initializes them to zero and returns a pointer to the
memory |
free |
Frees previously allocated space |
realloc |
Modifies the size of previously allocated space. |
|
sizeof ()
|
Die sizeof () Funktion bringt die Speichergr��e der erbetenen Variable zur�ck. Dieser Anruf sollte im Zusammenhang mit dem calloc () Funktion Anruf, damit nur das notwendige Ged�chtnis zugeteilt wird, anstatt in einer �rtlich festgelegten Gr��e verwendet werden. Das folgende betrachten,
|
struct date {
int hour, minute, second;
};
int x;
x = sizeof( struct date );
|
|
malloc ()
|
Ein Block mf Ged�chtnis kann mit der Funktion zugeteilt werden, die malloc genannt wird. Die malloc Funktion hebt einen Block des Ged�chtnisses der spezifizierten Gr��e auf und bringt einen Zeiger der Art L�cke zur�ck. Dies hei�t, da� wir es irgendeiner Art Zeiger zuweisen k�nnen. Es nimmt die folgende Gestalt an:
|
ptr=(cast-type*)malloc(byte-size);
|
|
PTR ist ein Zeiger der Art Werfenart, die das malloc einen Zeiger (der geworfenen Art) zu einem Bereich des Ged�chtnisses mit der Gr��e Bytegr��e zur�ckbringt. Das folgende ist das Beispiel des Verwendens von malloc Funktion
|
x=(int*)malloc(100*sizeof(int));
|
|
calloc ()
|
Calloc ist eine andere Speicherallozierungfunktion, die normalerweise verwendet, um um die mehrfachen Bl�cke der Ablage jeden zu bitten der gleichen Gr��e und dann alle Bytes auf Null stellt wird. Die allgemeine Form von calloc ist:
|
ptr=(cast-type*) calloc(n,elem-size);
|
|
Die oben genannte Aussage teilt angrenzenden Raum f�r n Bl�cke jede Gr��e der Elementgr��e Bytes zu. Alle Bytes werden bis null initialisiert und ein Zeiger zum ersten Byte der zugeteilten Region wird zur�ckgebracht. Wenn es nicht gen�gend Raum gibt, wird ein ung�ltiger Zeiger auch zur�ckgebracht.
|
realloc ()
|
Das Ged�chtnis, das zugeteilt wurde, indem es calloc oder malloc verwendete, konnte unzul�nglich oder �berflu� in beiden Situationen manchmal sein, die wir die Speichergr��e �ndern k�nnen, die bereits mit Hilfe der Funktion zugeteilt wird, die realloc genannt wird. Dieser Proze� wird die Neuverteilung des Ged�chtnisses genannt. Die allgemeine Aussage �ber Neuverteilung des Ged�chtnisses ist:
|
ptr=realloc(ptr,newsize);
|
|
freigeben ()
|
Kompilierzeitspeicher einer Variable wird zugeteilt und freigegeben durch das System in �bereinstimmung mit seiner Speicherkategorie. Mit der dynamischen Laufzeitverteilung ist es unsere Verantwortlichkeit, den Raum freizugeben, wenn es nicht an allen angefordert wird. Wenn die Ablage begrenzt ist, wird die Freigabe des Speicherplatzes wichtig. Wenn wir nicht mehr die Daten ben�tigen, die wir in einem Block des Ged�chtnisses speicherten und wir beabsichtigen nicht zu verwenden, da� Block f�r die Speicherung aller m�glicher anderen Informationen mit der freien Funktion, wir diesen Block des Ged�chtnisses f�r zuk�nftigen Gebrauch freigeben kann.
|
|
PTR ist ein Zeiger, der hergestellt worden ist, indem man calloc oder malloc verwendete.
|
Das folgende Programm veranschaulichen die Neuverteilung des Ged�chtnisses mit realloc () und malloc ()
|
/*Example program for reallocation*/
#include< stdio.h >
#include< stdlib.h >
define NULL 0
main()
{
char *buffer;
/*Allocating memory*/
if((buffer=(char *) malloc(10))==NULL)
{
printf("Malloc failed\n");
exit(1);
}
printf("Buffer of size %d created \n",_msize(buffer));
strcpy(buffer,Bangalore);
printf(\nBuffer contains:%s\n,buffer);
/*Reallocation*/
if((buffer=(char *)realloc(buffer,15))==NULL)
{
printf("Reallocation failed\n");
exit(1);
}
printf("\nBuffer size modified".\n);
printf("\nBuffer still contains: %s\n",buffer);
strcpy(buffer,Mysore);
printf("\nBuffer now contains:%s\n",buffer);
/*freeing memory*/
free(buffer);
}
|
|
|
|
Schl�sselw�rter:
Dynamische Speicherallozierung in C, dynamische Speicherallozierung in c++, c Reihen, c Tutorial, c Reihe, leeres c, c Syntax, Unix Ged�chtnis, Wertverteilung, C-Sprache, R�ckholc, Ged�chtnisart, dynamisches Beispiel, dynamischer Algorithmus, dynamischer Tutorial, c Beispiel, c Algorithmus, variables c, c Art, c Programm, Speichergr��e, Unix c
|