alloca()
mengalokasikan memori pada stack daripada pada heap, seperti pada kasus malloc()
. Jadi, ketika saya kembali dari rutinitas, memori itu dibebaskan. Jadi, sebenarnya ini memecahkan masalah saya membebaskan memori yang dialokasikan secara dinamis. Membebaskan memori yang dialokasikan melalui malloc()
adalah sakit kepala utama dan jika entah bagaimana terlewatkan mengarah ke semua jenis masalah memori.
Mengapa penggunaan alloca()
berkecil hati meskipun fitur di atas?
free
(yang jelas merupakan keuntungan), ketidakmampuan untuk menyelaraskannya (jelas tumpukan alokasi jauh lebih berat) dan lain-lain. Satu-satunya alasan untuk menghindari alloca
adalah untuk ukuran besar. Artinya, membuang banyak memori stack bukanlah ide yang baik, ditambah Anda memiliki kemungkinan stack overflow. Jika ini masalahnya - pertimbangkan untuk menggunakan malloca
/freea
alloca
adalah bahwa tumpukan tidak dapat terfragmentasi seperti tumpukan. Ini bisa terbukti berguna untuk aplikasi gaya run-forever yang sulit real-time, atau bahkan aplikasi yang kritis terhadap keselamatan, karena WCRU kemudian dapat dianalisis secara statis tanpa menggunakan kolam memori khusus dengan serangkaian masalah mereka sendiri (tidak ada temporal locality, sumber daya sub-optimal menggunakan).