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
|