Максимум C/C++ складывает размер программы

Таким образом, можно очистить любые открытые соединения, и т.д. инициализированные в блоке попытки. Если бы Вы открыли соединение, и затем исключение произошло, то исключение не было бы правильно закрыто. Этот тип сценария - то, для чего наконец блок.

98
задан avd 1 December 2009 в 12:56
поделиться

5 ответов

В Visual Studio размер стека по умолчанию, я думаю, составляет 1 МБ, поэтому при глубине рекурсии 10 000 каждый кадр стека может быть не более ~ 100 байт, что должно быть достаточно для алгоритма DFS.

Большинство компиляторов, включая Visual Studio, позволяют указать размер стека. В некоторых (всех?) Версиях Linux размер стека не является частью исполняемого файла, а является переменной среды в ОС. Затем вы можете проверить размер стека с помощью ulimit -s и установить новое значение с помощью, например, ulimit -s 16384 .

Вот ссылка с размерами стека по умолчанию для gcc.

DFS без рекурсии:

std::stack<Node> dfs;
dfs.push(start);
do {
    Node top = dfs.top();
    if (top is what we are looking for) {
       break;
    }
    dfs.pop();
    for (outgoing nodes from top) {
        dfs.push(outgoing node);
    }
} while (!dfs.empty())
94
ответ дан 24 November 2019 в 05:16
поделиться

стеки для потоков часто меньше. Вы можете изменить значение по умолчанию во время ссылки, или также изменить во время выполнения. Для справки, некоторые значения по умолчанию:

  • glibc i386, x86_64 7,4 МБ
  • Tru64 5,1 5,2 МБ
  • Cygwin 1,8 МБ
  • Solaris 7..10 1 МБ
  • MacOS X 10,5 460 КБ
  • AIX 5 98 КБ
  • OpenBSD 4.0 64 КБ
  • HP-UX 11 16 КБ
41
ответ дан 24 November 2019 в 05:16
поделиться

Первая ошибка связана с тем, что Length является свойством класса String , тогда как в вашей универсальной версии это тип параметра T не известно. Это может быть любой тип.

Вторая ошибка связана с тем, что вы возвращаете только объект запроса, но не фактический результат.

14
ответ дан 24 November 2019 в 05:16
поделиться

Да, есть вероятность переполнения стека. Стандарт C и C ++ не требует таких вещей, как глубина стека, это, как правило, проблема окружающей среды.

Большинство достойных сред разработки и / или операционных систем позволят вам настроить размер стека процесса, либо во время ссылки, либо во время загрузки.

Вы должны указать, какую ОС и среду разработки вы используете для более адресной помощи.

Например, в Ubuntu Karmic Koala по умолчанию для gcc зарезервировано 2M, а 4K зафиксировано, но это можно изменить, если вы свяжете программа. Для этого используйте параметр - stack в ld .

4
ответ дан 24 November 2019 в 05:16
поделиться

Я не понимаю, что вы имеете в виду, делая поиск в глубину прямоугольного массива, но я предполагаю, что вы знаете, что делаете.

Если ограничение стека является проблемой, вы сможете преобразовать свое рекурсивное решение в итеративное решение, которое помещает промежуточные значения в стек, который выделяется из кучи.

2
ответ дан 24 November 2019 в 05:16
поделиться