* 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 и го запълнете с числата от едно до един милион. След това запишете съдържанието на масива във файл, като използвате интервал като разделител за числата. Добавете нов ред след всяко десето число.
Добави коментар