C, PHP, VB, .NET

Дневникът на Филип Петров


* Stack или heap?

Публикувано на 06 ноември 2008 в раздел С/С++.

При разглеждането на оператора new споменахме понятието „динамична памет“ (heap), но не дадохме ясно определение защо се използва. Когато дефинираме променливи по обикновения познат начин (например „int x = 5;“) те се записват в стека (stack) на паметта. Стандартно тази памет е 1MB и може да се досетите, че в много случаи тя ще бъде недостатъчна (например ако искаме да създадем гигантски масив с един милион елемента double d[1000000]). Компилаторът няма да даде грешка, но програмата няма да може да се изпълни (ще се даде грешка от типа stack overflow).

За да се справите с този проблем трябва да дефинирате такива големи масиви/обекти в динамичната памет:

	double *d = new double[1000000];

Операторът new записва обектите в динамичната памет, която е с обем почти цялата RAM памет на компютъра. В допълнение ако дори тази RAM не е достатъчна, то операционната система ще ви позволи да пишете и на хард диска в swap file/partition. За да работите с масива от примера например ще се наложи да си припомните урока за адресна аритметика. Единствения недостатък в случая, е че трябва да се грижим явно да „унищожаваме“ елементите чрез оператора delete.

Задача: Създайте масив от 1 милион елемента от тип long и го запълнете с числата от едно до един милион. След това запишете съдържанието на масива във файл, като използвате интервал като разделител за числата. Добавете нов ред след всяко десето число.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*