Rumah > Artikel > pembangunan bahagian belakang > Dalam bahasa C, limpahan timbunan dan limpahan tindanan merujuk kepada apabila atur cara melebihi sempadan yang diperuntukkan apabila menggunakan ingatan timbunan atau ingatan tindanan.
Timbunan digunakan untuk menyimpan pembolehubah dinamik. Ia adalah kawasan memori proses. malloc(), calloc(), resize() semua fungsi terbina dalam ini biasanya digunakan untuk menyimpan pembolehubah dinamik.
Apabila limpahan timbunan berlaku -
A) Jika kita memperuntukkan pembolehubah nombor besar dinamik -
int main() { float *ptr = (int *)malloc(sizeof(float)*1000000.0)); }
B) Jika kita memperuntukkan memori secara berterusan dan tidak melepaskannya selepas digunakan.
int main() { for (int i=0; i<100000000000; i++) { int *p = (int *)malloc(sizeof(int)); } }
Timbunan ialah struktur data yang terakhir masuk dahulu. Ia digunakan untuk menyimpan pembolehubah tempatan yang digunakan di dalam fungsi. Parameter dihantar melalui fungsi ini dan alamat pemulangannya.
Jika program menggunakan lebih banyak ruang memori, maka limpahan tindanan akan berlaku disebabkan saiz tindanan yang terhad dalam ingatan komputer.
Limpahan timbunan berlaku apabila-
C) Jika fungsi dipanggil secara rekursif dengan sendirinya masa tak terhingga, maka timbunan tidak akan dapat menyimpan sejumlah besar pembolehubah tempatan, jadi limpahan tindanan berlaku-
void calculate(int a) { if (a== 0) return; a = 6; calculate(a); } int main() { int a = 5; calculate(a); }
D) Jika sebilangan besar pembolehubah tempatan diisytiharkan atau dimensi besar diisytiharkan Tatasusunan atau matriks, boleh menyebabkan limpahan tindanan.
rreeeeAtas ialah kandungan terperinci Dalam bahasa C, limpahan timbunan dan limpahan tindanan merujuk kepada apabila atur cara melebihi sempadan yang diperuntukkan apabila menggunakan ingatan timbunan atau ingatan tindanan.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!