Stavo revisionando C e mi sono imbattuto in funzioni alloca/libere che sono descritte come allocazione di spazio su uno stack. È lo stesso di malloc/free? o questo è qualcosa di diverso? Grazie.Funzione alloca in C
risposta
Penso che intenda lo alloca
che viene utilizzato per allocare memoria nello stack. E sì, questo è diverso da malloc
e free
che allocano sullo heap.
Non tentare di liberare memoria allocata con alloca
perché viene automaticamente liberata quando la funzione che chiama alloca
torna al proprio chiamante.
L'utilizzo degli array di lunghezza variabilee/o C99 può essere un'attività rischiosa poiché è possibile che l'stack venga prontamente sovraccaricato se si utilizzano questi strumenti in modo imprudente.
Il terzo paragrafo non può essere sottolineato abbastanza. Non c'è quasi nessun modo sicuro per usare 'alloca' o VLA. –
malloc
, calloc
e realloc
funzioni allocare spazio sull'heap.
free
funzione "libera" lo spazio precedentemente assegnato da queste funzioni.
Aggiunta di alcune informazioni aggiuntive a una vecchia risposta.
malloc()
può essere utilizzato per qualche motivo, alcuni di loro sono
- allocazione dinamica della memoria
- Scope (Quando si ha la necessità di memoria che rimane tra chiamate di funzione)
Ma, uno in più lavoro che viene aggiunto con malloc()
è necessario esplicitamente free()
la memoria allocata.
Quindi, al fine di utilizzare solo il memoria dinamica funzione di allocazione, e per evitare il sovraccarico di free()
, si può usare alloca()
nel loro programma. Ciò è reso possibile perché la memoria è allocata sullo stack (come menzionato da altre risposte) quando viene utilizzato lo alloca()
.
@NickA Spero che Haris abbia fatto. L'ho risolto in ogni caso. – cmaster
- 1. CUDA alloca memoria nella funzione __device__
- 2. Implementazione di Alloca
- 3. È parte alloca dello standard C++?
- 4. In che modo Enum alloca la memoria su C?
- 5. violazione di accesso quando si utilizza alloca
- 6. Il servizio alloca molta memoria?
- 7. È una buona ragione per usare alloca?
- 8. In che modo .NET framework alloca memoria per OutOfMemoryException?
- 9. Perché il prologo della funzione GCC x86-64 alloca meno stack rispetto alle variabili locali?
- 10. problema mmap, alloca enormi quantità di memoria
- 11. Come una grande matrice alloca la memoria?
- 12. Funzione C Wrapping in Cython e NumPy
- 13. Funzione Malloc in C++
- 14. funzione Left in C#
- 15. Funzione string.indexOf in C
- 16. Funzione annidata in C
- 17. Funzione fgets() in C
- 18. Funzione Fork() in C
- 19. Come serializzatore Kryo alloca il buffer in Spark
- 20. Riferimento alla funzione Lua in C/C++
- 21. Come eseguire questa funzione in C/C++
- 22. dichiarazione di funzione in C e C++
- 23. Funzione clrscr in C e C++
- 24. utilizzando la funzione C in C#
- 25. Funzione "id" in C++ 0x
- 26. Funzione codice operativo in C
- 27. riferimenti in C++ con funzione
- 28. Sovraccarico funzione template in C++
- 29. Heap alloca un array 2D (non un array di puntatori)
- 30. Will compilatore ottimizzare malloc/liberi o nuova/delete coppia in alloca
Il seguente link suggerisce che 'alloc' è una funzione diversa: http://cboard.cprogramming.com/c-programming/140380-k-r-5-6-stumped-again.html –
Penso che tu abbia ragione. Penso che sia il loro esempio di implementazione di un allocatore .. – Cemre
Stai rivedendo K & R? Devi essere brillante. – abelenky