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.

Dalam bahasa C, limpahan timbunan dan limpahan tindanan merujuk kepada apabila atur cara melebihi sempadan yang diperuntukkan apabila menggunakan ingatan timbunan atau ingatan tindanan.

王林
王林ke hadapan
2023-09-11 13:41:021403semak imbas

在C语言中,堆溢出(Heap overflow)和栈溢出(Stack overflow)是指程序在使用堆内存或栈内存时超出了其分配的边界

Limpahan timbunan

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 Limpahan

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.

rreeee

Atas 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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Adakah C++0x serasi dengan C?Artikel seterusnya:Adakah C++0x serasi dengan C?