StackOverflow -Exceptie in C#

Posted by anghelvalentin on September 23, 2019

Nu cred ca exista vreun programator care sa nu fi intrat vreodata pe StackOverflow. Dar ti-ai pus intrebarea vreodata de unde provine numele ?

Vine de la o exceptie din C# (exista si in celelalte limbaje, dar StackOverflow e scris in ASP.NET).

Cand primim StackOverflow exception ?

Mai ti minte in facultate cand ai invatat la POO (Programare Orientatat Obiect) sau la pointeri despre cele doua zone de memorie: stiva si heap. In heap sunt alocate variabilele de tip referinta, in schimb ce cele de tip valoare (cum ar fi int, float, structurile etc.) sunt salvate pe stiva. Deci daca avem o functie si in interiorul ei declaram o variabila de tip int, aceasta este salvata pe stiva, in shimb daca ea este declarata la nivelul clasei, atunci aceasta este alocata in heap, intrucat clasa este alocata in heap. De asemenea, in momentul in care apelam o functie, o inregistrare este pusa pe stiva.

Memoria stivei variaza de la un sistem de operare la altul, dar valoarea obisnuita este de 1 MB.

In C++ sau C este destul de usor sa primesti o astfel de exceptie. In momentul in care declari un vector de dimensiune mare, daca nu aloci memorie cu ajutorul operatorului new din c++ sau cu malloc, atunci vectorul va fi pus pe stiva. Cum stiva este destul de mica, surpriza!

#include<stdio.h>
#define dimension 100000000
void main()
{
	int arr[dimension];
	int arr2[dimension]; 
	printf("Hello world"); //This printf doesn't print because we will receive a exception
}

Daca esti familiar cu C# stii ca in mod normal vectorul este alocat in heap, dar poti sa arunci o astfel de exceptie cu ajutorul unei functii recursive care nu are conditie de exit.

static void RecursiveMethod()
{
            RecursiveMethod();
}

Functii recursive nu am vazut, dar am vazut la un moment dat o proprietate recursiva, care ghici ce: CRAPA.

Acum poti sa declari ca stii de unde vine site-ului StackOverflow, care contribuie sa primesti tu salariul la sfarsit de luna 😊, care te-a ajutat precum un parinte iubitor sa termini facultatea, care a fost langa tine cand ai dat de belea.

Codul sursa C++

Codul sursa C#