Есть пара мест, в которые вы можете поместить свой массив в память. Самая распространенная разница, о которой мы думаем, это стек и куча .
Стек - это то, как компьютер отслеживает, какую функцию вы используете, как вернуться из функции и локальные переменные. Он часто ограничен. Точный лимит зависит от вашей платформы и, возможно, от того, как вы скомпилировали свою программу.
Куча - это еще одна область памяти, где компилятор обычно хранит то, что вы выделили, с ключевым словом new
. Это часто намного больше и способно хранить большой массив, такой как ваш. Недостатком того, чтобы держать вещи в куче, является то, что вы должны помнить до delete
их в соответствующее время.
В вашем примере вы объявляете массив элементов размером 10000 000 в стеке.Если вы хотите, чтобы объявить, что массив в куче, вы могли бы сделать это следующим образом:
srand (time(NULL));
int* array = new int[10000000];
for(int i = 0; i < 10000000; i++){
array[i] = (rand() % 10000000) + 1;
}
//Sometime later...
delete[] array;
Однако, C++ дает нам лучшие инструменты для этого. Если вы хотите большой массив, используйте std::vector
.
srand (time(NULL));
std::vector<int> array(10000000);
for(std::size_t i = 0; i < array.size(); i++){
array[i] = (rand() % 10000000) + 1;
}
Теперь ваш std::vector
находится в стеке, но память он управляет на куче. Вам не нужно забывать удалять его позже, и ваша программа не сбой.
В зависимости от размера стека. Кроме того, вы должны использовать заголовок '' для псевдослучайных чисел. –
chris
Является ли это только тем, что читает этот вопрос, и предполагает, что д-р Злой говорит: «Я хочу хранить 10 МИЛЛИОНОВ НОМЕРОВ», пока он крутит палец в уголке рта? http://i.imgur.com/h27654L.jpg – mah