Я немного застрял в этом домашнем задании на этот вопрос:
Напишите три функции на C или C ++: одну, которая статически объявляет большой массив, одну, которая объявляет тот же самый большой массив в стеке, и ту, которая создает такой же большой массив из кучи. Вызовите каждую из подпрограмм большое количество раз (не менее 100 000) и выведите время, необходимое для каждой из них. Объясните результаты.
int main(void)
{
int staticIntArray[ARRAY_SIZE];//array on the stack
int *ptrArray = new int[ARRAY_SIZE]; // pointer on the stack but array on the heap.
double timeItTakes;
clock_t tStart = clock();
fillWithRandomNumbers(staticIntArray, ARRAY_SIZE);
double time = static_cast<double>(clock() - static_cast<double>(tStart)/static_cast<double>(CLOCKS_PER_SEC));
printf ("Array on stack time is %.10f\n", time);
clock_t tStart2 = clock();
fillWithRandomNumbers(ptrArray, ARRAY_SIZE);
double time2 = static_cast<double>(clock() - static_cast<double>(tStart2)/static_cast<double>(CLOCKS_PER_SEC));
printf ("Array on heap time is %.10f\n", time2);
//cout << "Array on the heap time is " << (timeIntStack - time(NULL));
}
void fillWithRandomNumbers(int intArray[], int size)
{
for(int i = 0; i<size; i++)
intArray[i] = rand();
}
Вывод:
Array on stack time is 1.9990000000
Array on heap time is 2.9980000000
Press any key to continue . . .
Что я понимаю, так это то, что в стеке выделяется гораздо меньше памяти для локальных переменных и параметров, а в куче - большой пул динамически выделяемой памяти. Вот мои вопросы ...
Влияет ли использование случайного класса на время выполнения функции? Распределение больших массивов в стеке происходит медленнее, поскольку доступно меньше памяти?
Я не пытаюсь попросить вас сделать мою домашнюю работу, но мне просто нужна небольшая помощь в разъяснении понятий ... Любая помощь будет высоко ценится ...