miniatura|321x321px|Això mostra la diferència entre malloc i Heapalloc. L'assignació de memòria dinàmica en C es refereix a realitzar una gestió manual de memòria per a l'assignació de memòria dinàmica en el llenguatge de programació C mitjançant un grup de funcions a la biblioteca estàndard C, és a dir, , , , i .
El llenguatge de programació C++ inclou aquestes funcions; tanmateix, els operadors i proporcionen una funcionalitat similar i són recomanats pels autors d'aquest idioma. Tot i així, hi ha diverses situacions en què no s'aplica l'ús new/delete, com ara el codi de recollida d'escombraries o el codi sensible al rendiment, i una combinació de malloc i ubicació. es pot requerir new en lloc de l'operador new de nivell superior.
Moltes implementacions diferents del mecanisme d'assignació de memòria real, utilitzades per, estan disponibles. El seu rendiment varia tant en el temps d'execució com en la memòria requerida.
Justificació El llenguatge de programació C gestiona la memòria de forma estàtica, automàtica o dinàmica. Les variables de durada estàtica s'assignen a la memòria principal, normalment juntament amb el codi executable del programa, i persisteixen durant tota la vida del programa; Les variables de durada automàtica s'assignen a la pila i van i venen a mesura que les funcions es criden i tornen. Per a variables de durada estàtica i de durada automàtica, la mida de l'assignació ha de ser constant en temps de compilació (excepte en el cas de matrius automàtiques de longitud variable). Si la mida requerida no es coneix fins a l'execució (per exemple, si es llegeixen dades de mida arbitrària de l'usuari o d'un fitxer de disc), l'ús d'objectes de dades de mida fixa és inadequat.
Visió general de les funcions Les funcions d'assignació de memòria dinàmica C es defineixen a la capçalera stdlib.h (capçalera cstdlib en C++). FuncióDescripciómallocassigna el nombre especificat de bytesaligned_allocassigna el nombre especificat de bytes a l'alineació especificadareallocaugmenta o disminueix la mida del bloc de memòria especificat, movent-lo si calcallocassigna el nombre especificat de bytes i els inicialitza a zerofreeallibera el bloc de memòria especificat de nou al sistema
Diferències entre malloc() i calloc() malloc() pren un sol argument (la quantitat de memòria a assignar en bytes), mentre que calloc() pren dos arguments — el nombre d'elements i la mida de cada element. malloc() només assigna memòria, mentre que calloc() assigna i posa a zero els bytes de la regió assignada.
Exemple d'ús Crear una matriu de deu nombres enters amb abast automàtic és senzill a C:int array;Tanmateix, la mida de la matriu es fixa en temps de compilació. Si es vol assignar una matriu similar dinàmicament sense utilitzar una matriu de longitud variable, que no es garanteix que sigui compatible amb totes les implementacions C11, es pot utilitzar el codi següent:int *array = malloc(10 * sizeof(int));Això calcula el nombre de bytes que ocupen deu nombres enters a la memòria, després demana que molts bytes a malloc i assigna el resultat a un punter anomenat array (a causa de la sintaxi C, els punters i les matrius es poden utilitzar indistintament en algunes situacions).
Referències
Categoria:Memòria informàtica