Я скачал Visual Studio и запустил C ++ вчера. Я сейчас столкнулся с проблемой, хотя. У меня есть супер простая программа, которая заполняет большой массив логическими значениями, а затем подсчитывает количество истинных элементов. Теперь я хочу запустить свою программу для очень больших массивов (желательно с длинами 2 ^ 33 или 2 ^ 34). Я понял, что это создаст проблему с переполнением стека и что вместо этого я должен разместить массив в куче. Я не понимаю, как это сделать, хотя. Я также слышал, что принято использовать векторы вместо массивов, но я подумал, что они могут быть медленнее, поэтому я остановился на массивах. Что мне сделать, чтобы моя программа работала как можно быстрее для больших массивов?
void makeB(bool *a, long double length)
{
for (long x = 0; x < sqrtl(length/2)+1; ++x)
{
for (long y = x; y < sqrtl(length)+1; ++y)
{
long int z = x * x + y * y;
if (z < length)
{
a[z] = true;
}
}
}
}
int main()
{
const long length = 268435457;
static bool a[length] = {};
long b = 0;
makeB(a, length);
for (long i = 0; i < length; ++i)
{
if (a[i])
{
b += 1;
}
}
printf("%ld: ", length - 1);
printf("%ld.\n", b);
char input;
cin >> input;
return 0;
}
Чтобы уточнить, я хочу иметь возможность увеличить переменную длины до больших значений без получения ошибки переполнения стека. Быстрый код также предпочтительнее. Я также в порядке с использованием векторов, если это действительно лучше. Если это прояснит причину моего замешательства, я приду с Явы.
Спасибо!
РЕДАКТИРОВАТЬ: Во-первых, я должен отметить, что действительно 2 ^ 40 это слишком много, чтобы ожидать от моей системы, на что указывают почти все, извините за это. Я чувствую, что могу ожидать, возможно, 2 ^ 33. А во-вторых, спасибо за все ответы, но каков окончательный консенсус? Должен ли я взглянуть на std :: make_unique? Еще раз спасибо!