Difference between revisions of "Ошибка превышения лимита памяти"

From EjudgeWiki
(Undo revision 2496 by EltsiTrelo (Talk))
(Undo revision 2484 by EltsiTrelo (Talk))
Line 1: Line 1:
[http://huruple.qsh.eu/20081223-anukokunda-oka.htm anukokunda oka roju movie] [http://acsitzar.0lx.net/sitemap.html page] [http://naceceli.qsh.eu/page1427.html movie narnia original] [http://zelzelqa.is-the-boss.com/news-rawshooter-premium-2008-12-22.html rawshooter premium crack] [http://releltl.0lx.net/20081111-movie-theatres.html movie theatres in manhattan new york]
 
 
trroertro
 
trroertro
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Вердикты тестирования]]/[[Ошибка превышения лимита памяти]]
+
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Вердикты тестирования]]/[[Ошибка превышения лимита памяти]]
  
Английское название: [[Memory Limit Exceeded]].
+
Английское название: [[Memory Limit Exceeded]].
  
Ошибка диагностируется, если в процессе работы тестирующая программа потребила больше памяти, чем указано в ограничениях задачи. Обоснованность диагностирования этой ошибки вызывает дискуссии (см. далее).
+
Ошибка диагностируется, если в процессе работы тестирующая программа потребила больше памяти, чем указано в ограничениях задачи. Обоснованность диагностирования этой ошибки вызывает дискуссии (см. далее).
  
Разные тестирующие системы подходят к ограничению памяти для работающей программы по-разному. В ejudge ограничение памяти реализуется с помощью установки ограничения на размер виртуального адресного пространства и размер стека (см. [[ulimit]]). Таким образом, тестируемая программа не может превысить установленные ограничения.
+
Разные тестирующие системы подходят к ограничению памяти для работающей программы по-разному. В ejudge ограничение памяти реализуется с помощью установки ограничения на размер виртуального адресного пространства и размер стека (см. [[ulimit]]). Таким образом, тестируемая программа не может превысить установленные ограничения.
  
Диагностирование ошибки превышения ограничения по памяти в системе ejudge работает, толко если установлен [[патч к ядру Linux]]. Если патч не установлен, превышение ограничения по памяти будет диагностировано как ошибка времени выполнения. Кроме того, система ejudge позволяет отключить диагностирование данной ошибки даже если патч к ядру установлен.
+
Диагностирование ошибки превышения ограничения по памяти в системе ejudge работает, толко если установлен [[патч к ядру Linux]]. Если патч не установлен, превышение ограничения по памяти будет диагностировано как ошибка времени выполнения. Кроме того, система ejudge позволяет отключить диагностирование данной ошибки даже если патч к ядру установлен.
  
Хотя диагностирование данной ошибки может быть полезно для участников для отладки их решений, в большистве ситуаций граница между ошибкой при выполнении программы и ошибкой превышения ограничения по памяти оказывается очень размытой.
+
Хотя диагностирование данной ошибки может быть полезно для участников для отладки их решений, в большистве ситуаций граница между ошибкой при выполнении программы и ошибкой превышения ограничения по памяти оказывается очень размытой.
  
Например, если превышен максимальный размер стека из-за того, что программа вошла в бесконечную рекурсию, то такая ситуация должна скорее рассматриваться как ошибка при выполнении программы. Но с другой стороны, если программа попыталась выделить слишком много памяти в стеке (например, из-за слишком большого локального массива), такая ситуация должна рассматриваться как превышение ограничения по памяти. Естественно, невозможно простым способом четко различить эти две ситуации.
+
Например, если превышен максимальный размер стека из-за того, что программа вошла в бесконечную рекурсию, то такая ситуация должна скорее рассматриваться как ошибка при выполнении программы. Но с другой стороны, если программа попыталась выделить слишком много памяти в стеке (например, из-за слишком большого локального массива), такая ситуация должна рассматриваться как превышение ограничения по памяти. Естественно, невозможно простым способом четко различить эти две ситуации.
  
С другой стороны, например, в языке C функция malloc возвращает NULL, если память выделить не удалось. Если тестируемая программа не проверяет результат функции malloc на NULL и получает ошибку доступа по нулевому указателю, то это типичная ошибка программиста и должна рассматриваться как ошибка при выполнении программы. И наоборот, программа может отлавливать ситуации, когда malloc возвращает NULL, и модифицировать свое поведение (например, почистив хеш-таблицу).
+
С другой стороны, например, в языке C функция malloc возвращает NULL, если память выделить не удалось. Если тестируемая программа не проверяет результат функции malloc на NULL и получает ошибку доступа по нулевому указателю, то это типичная ошибка программиста и должна рассматриваться как ошибка при выполнении программы. И наоборот, программа может отлавливать ситуации, когда malloc возвращает NULL, и модифицировать свое поведение (например, почистив хеш-таблицу).

Revision as of 09:16, 12 January 2009

trroertro Навигация: Главная страница/Система ejudge/Использование/Вердикты тестирования/Ошибка превышения лимита памяти

Английское название: Memory Limit Exceeded.

Ошибка диагностируется, если в процессе работы тестирующая программа потребила больше памяти, чем указано в ограничениях задачи. Обоснованность диагностирования этой ошибки вызывает дискуссии (см. далее).

Разные тестирующие системы подходят к ограничению памяти для работающей программы по-разному. В ejudge ограничение памяти реализуется с помощью установки ограничения на размер виртуального адресного пространства и размер стека (см. ulimit). Таким образом, тестируемая программа не может превысить установленные ограничения.

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

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

Например, если превышен максимальный размер стека из-за того, что программа вошла в бесконечную рекурсию, то такая ситуация должна скорее рассматриваться как ошибка при выполнении программы. Но с другой стороны, если программа попыталась выделить слишком много памяти в стеке (например, из-за слишком большого локального массива), такая ситуация должна рассматриваться как превышение ограничения по памяти. Естественно, невозможно простым способом четко различить эти две ситуации.

С другой стороны, например, в языке C функция malloc возвращает NULL, если память выделить не удалось. Если тестируемая программа не проверяет результат функции malloc на NULL и получает ошибку доступа по нулевому указателю, то это типичная ошибка программиста и должна рассматриваться как ошибка при выполнении программы. И наоборот, программа может отлавливать ситуации, когда malloc возвращает NULL, и модифицировать свое поведение (например, почистив хеш-таблицу).