|
|
(3 intermediate revisions by the same user not shown) |
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]
| + | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Вердикты тестирования]]/[[Ошибка превышения лимита памяти]] |
− | trroertro
| |
− | ÃÂðòøóðÃÂøÃÂ: [[Main Page|ÃÂûðòýðàÃÂÃÂÃÂðýøÃÂð]]/[[áøÃÂÃÂõüð ejudge]]/[[ÃÂÃÂÿþûÃÂ÷þòðýøõ]]/[[ÃÂõÃÂôøúÃÂàÃÂõÃÂÃÂøÃÂþòðýøÃÂ]]/[[ÃÂÃÂøñúð ÿÃÂõòÃÂÃÂõýøàûøüøÃÂð ÿðüÃÂÃÂø]]
| |
| | | |
− | ÃÂýóûøùÃÂúþõ ýð÷òðýøõ: [[Memory Limit Exceeded]].
| + | Английское название: [[Memory Limit Exceeded]], [[ML]] |
| | | |
− | ÃÂÃÂøñúð ôøðóýþÃÂÃÂøÃÂÃÂõÃÂÃÂÃÂ, õÃÂûø ò ÿÃÂþÃÂõÃÂÃÂõ ÃÂðñþÃÂàÃÂõÃÂÃÂøÃÂÃÂÃÂÃÂðàÿÃÂþóÃÂðüüð ÿþÃÂÃÂõñøûð ñþûÃÂÃÂõ ÿðüÃÂÃÂø, ÃÂõü ÃÂúð÷ðýþ ò þóÃÂðýøÃÂõýøÃÂÃÂ
÷ðôðÃÂø. ÃÂñþÃÂýþòðýýþÃÂÃÂàôøðóýþÃÂÃÂøÃÂþòðýøàÃÂÃÂþù þÃÂøñúø òÃÂ÷ÃÂòðõàôøÃÂúÃÂÃÂÃÂøø (ÃÂü. ôðûõõ).
| + | Ошибка диагностируется, если в процессе работы тестирующая программа потребила больше памяти, чем указано в ограничениях задачи. Обоснованность диагностирования этой ошибки вызывает дискуссии (см. далее). |
| | | |
− | àð÷ýÃÂõ ÃÂõÃÂÃÂøÃÂÃÂÃÂÃÂøõ ÃÂøÃÂÃÂõüàÿþôÃÂ
þôÃÂàú þóÃÂðýøÃÂõýøàÿðüÃÂÃÂø ôûàÃÂðñþÃÂðÃÂÃÂõù ÿÃÂþóÃÂðüüàÿþ-ÃÂð÷ýþüÃÂ. àejudge þóÃÂðýøÃÂõýøõ ÿðüÃÂÃÂø ÃÂõðûø÷ÃÂõÃÂÃÂààÿþüþÃÂÃÂàÃÂÃÂÃÂðýþòúø þóÃÂðýøÃÂõýøàýð ÃÂð÷üõàòøÃÂÃÂÃÂðûÃÂýþóþ ðôÃÂõÃÂýþóþ ÿÃÂþÃÂÃÂÃÂðýÃÂÃÂòð ø ÃÂð÷üõàÃÂÃÂõúð (ÃÂü. [[ulimit]]). âðúøü þñÃÂð÷þü, ÃÂõÃÂÃÂøÃÂÃÂõüðàÿÃÂþóÃÂðüüð ýõ üþöõàÿÃÂõòÃÂÃÂøÃÂàÃÂÃÂÃÂðýþòûõýýÃÂõ þóÃÂðýøÃÂõýøÃÂ.
| + | Разные тестирующие системы подходят к ограничению памяти для работающей программы по-разному. В ejudge ограничение памяти реализуется с помощью установки ограничения на размер виртуального адресного пространства и размер стека (см. [[ulimit]]). Таким образом, тестируемая программа не может превысить установленные ограничения. |
| | | |
− | ÃÂøðóýþÃÂÃÂøÃÂþòðýøõ þÃÂøñúø ÿÃÂõòÃÂÃÂõýøàþóÃÂðýøÃÂõýøàÿþ ÿðüÃÂÃÂø ò ÃÂøÃÂÃÂõüõ ejudge ÃÂðñþÃÂðõÃÂ, ÃÂþûúþ õÃÂûø ÃÂÃÂÃÂðýþòûõý [[ÿðÃÂàú ÃÂôÃÂàLinux]]. ÃÂÃÂûø ÿðÃÂàýõ ÃÂÃÂÃÂðýþòûõý, ÿÃÂõòÃÂÃÂõýøõ þóÃÂðýøÃÂõýøàÿþ ÿðüÃÂÃÂø ñÃÂôõàôøðóýþÃÂÃÂøÃÂþòðýþ úðú þÃÂøñúð òÃÂõüõýø òÃÂÿþûýõýøÃÂ. ÃÂÃÂþüõ ÃÂþóþ, ÃÂøÃÂÃÂõüð ejudge ÿþ÷òþûÃÂõàþÃÂúûÃÂÃÂøÃÂàôøðóýþÃÂÃÂøÃÂþòðýøõ ôðýýþù þÃÂøñúø ôðöõ õÃÂûø ÿðÃÂàú ÃÂôÃÂàÃÂÃÂÃÂðýþòûõý.
| + | Диагностирование ошибки превышения ограничения по памяти в системе ejudge работает, толко если установлен [[патч к ядру Linux]]. Если патч не установлен, превышение ограничения по памяти будет диагностировано как ошибка времени выполнения. Кроме того, система ejudge позволяет отключить диагностирование данной ошибки даже если патч к ядру установлен. |
| | | |
− | Ã¥þÃÂàôøðóýþÃÂÃÂøÃÂþòðýøõ ôðýýþù þÃÂøñúø üþöõàñÃÂÃÂàÿþûõ÷ýþ ôûàÃÂÃÂðÃÂÃÂýøúþò ôûàþÃÂûðôúø øÃÂ
ÃÂõÃÂõýøù, ò ñþûÃÂÃÂøÃÂÃÂòõ ÃÂøÃÂÃÂðÃÂøù óÃÂðýøÃÂð üõöôàþÃÂøñúþù ÿÃÂø òÃÂÿþûýõýøø ÿÃÂþóÃÂðüüàø þÃÂøñúþù ÿÃÂõòÃÂÃÂõýøàþóÃÂðýøÃÂõýøàÿþ ÿðüÃÂÃÂø þúð÷ÃÂòðõÃÂÃÂàþÃÂõýàÃÂð÷üÃÂÃÂþù.
| + | Хотя диагностирование данной ошибки может быть полезно для участников для отладки их решений, в большистве ситуаций граница между ошибкой при выполнении программы и ошибкой превышения ограничения по памяти оказывается очень размытой. |
| | | |
− | ÃÂðÿÃÂøüõÃÂ, õÃÂûø ÿÃÂõòÃÂÃÂõý üðúÃÂøüðûÃÂýÃÂù ÃÂð÷üõàÃÂÃÂõúð ø÷-÷ð ÃÂþóþ, ÃÂÃÂþ ÿÃÂþóÃÂðüüð òþÃÂûð ò ñõÃÂúþýõÃÂýÃÂàÃÂõúÃÂÃÂÃÂøÃÂ, ÃÂþ ÃÂðúðàÃÂøÃÂÃÂðÃÂøàôþûöýð ÃÂúþÃÂõõ ÃÂðÃÂÃÂüðÃÂÃÂøòðÃÂÃÂÃÂàúðú þÃÂøñúð ÿÃÂø òÃÂÿþûýõýøø ÿÃÂþóÃÂðüüÃÂ. ÃÂþ àôÃÂÃÂóþù ÃÂÃÂþÃÂþýÃÂ, õÃÂûø ÿÃÂþóÃÂðüüð ÿþÿÃÂÃÂðûðÃÂàòÃÂôõûøÃÂàÃÂûøÃÂúþü üýþóþ ÿðüÃÂÃÂø ò ÃÂÃÂõúõ (ýðÿÃÂøüõÃÂ, ø÷-÷ð ÃÂûøÃÂúþü ñþûÃÂÃÂþóþ ûþúðûÃÂýþóþ üðÃÂÃÂøòð), ÃÂðúðàÃÂøÃÂÃÂðÃÂøàôþûöýð ÃÂðÃÂÃÂüðÃÂÃÂøòðÃÂÃÂÃÂàúðú ÿÃÂõòÃÂÃÂõýøõ þóÃÂðýøÃÂõýøàÿþ ÿðüÃÂÃÂø. ÃÂÃÂÃÂõÃÂÃÂòõýýþ, ýõòþ÷üþöýþ ÿÃÂþÃÂÃÂÃÂü ÃÂÿþÃÂþñþü ÃÂõÃÂúþ ÃÂð÷ûøÃÂøÃÂàÃÂÃÂø ôòõ ÃÂøÃÂÃÂðÃÂøø.
| + | Например, если превышен максимальный размер стека из-за того, что программа вошла в бесконечную рекурсию, то такая ситуация должна скорее рассматриваться как ошибка при выполнении программы. Но с другой стороны, если программа попыталась выделить слишком много памяти в стеке (например, из-за слишком большого локального массива), такая ситуация должна рассматриваться как превышение ограничения по памяти. Естественно, невозможно простым способом четко различить эти две ситуации. |
| | | |
− | á ôÃÂÃÂóþù ÃÂÃÂþÃÂþýÃÂ, ýðÿÃÂøüõÃÂ, ò ÃÂ÷ÃÂúõ C ÃÂÃÂýúÃÂøàmalloc òþ÷òÃÂðÃÂðõàNULL, õÃÂûø ÿðüÃÂÃÂàòÃÂôõûøÃÂàýõ ÃÂôðûþÃÂÃÂ. ÃÂÃÂûø ÃÂõÃÂÃÂøÃÂÃÂõüðàÿÃÂþóÃÂðüüð ýõ ÿÃÂþòõÃÂÃÂõàÃÂõ÷ÃÂûÃÂÃÂðàÃÂÃÂýúÃÂøø malloc ýð NULL ø ÿþûÃÂÃÂðõàþÃÂøñúàôþÃÂÃÂÃÂÿð ÿþ ýÃÂûõòþüàÃÂúð÷ðÃÂõûÃÂ, ÃÂþ ÃÂÃÂþ ÃÂøÿøÃÂýðàþÃÂøñúð ÿÃÂþóÃÂðüüøÃÂÃÂð ø ôþûöýð ÃÂðÃÂÃÂüðÃÂÃÂøòðÃÂÃÂÃÂàúðú þÃÂøñúð ÿÃÂø òÃÂÿþûýõýøø ÿÃÂþóÃÂðüüÃÂ. àýðþñþÃÂþÃÂ, ÿÃÂþóÃÂðüüð üþöõàþÃÂûðòûøòðÃÂàÃÂøÃÂÃÂðÃÂøø, úþóôð malloc òþ÷òÃÂðÃÂðõàNULL, ø üþôøÃÂøÃÂøÃÂþòðÃÂàÃÂòþõ ÿþòõôõýøõ (ýðÿÃÂøüõÃÂ, ÿþÃÂøÃÂÃÂøò ÃÂ
õÃÂ-ÃÂðñûøÃÂÃÂ).
| + | С другой стороны, например, в языке C функция malloc возвращает NULL, если память выделить не удалось. Если тестируемая программа не проверяет результат функции malloc на NULL и получает ошибку доступа по нулевому указателю, то это типичная ошибка программиста и должна рассматриваться как ошибка при выполнении программы. И наоборот, программа может отлавливать ситуации, когда malloc возвращает NULL, и модифицировать свое поведение (например, почистив хеш-таблицу). |
| + | |
| + | === Добавления в версии [[изменения в версии 3.12.0|3.12.0]] === |
| + | |
| + | Если тестируемые программы |
| + | запускаются [[Изоляция недоверенных процессов в контейнерах|в контейнерах]], |
| + | для задачи установлено ограничение на |
| + | [[Serve.cfg:problem:max_rss_size|максимальный размер оперативной памяти]], |
| + | и включен режим |
| + | [[serve.cfg:global:enable_memory_limit_error|обнаружения данной ошибки]], |
| + | программа [[ej-suid-container]] эвристически определяет возникновение |
| + | ошибки превышения ограничения памяти. |
Навигация: Главная страница/Система ejudge/Использование/Вердикты тестирования/Ошибка превышения лимита памяти
Английское название: Memory Limit Exceeded, ML
Ошибка диагностируется, если в процессе работы тестирующая программа потребила больше памяти, чем указано в ограничениях задачи. Обоснованность диагностирования этой ошибки вызывает дискуссии (см. далее).
Разные тестирующие системы подходят к ограничению памяти для работающей программы по-разному. В ejudge ограничение памяти реализуется с помощью установки ограничения на размер виртуального адресного пространства и размер стека (см. ulimit). Таким образом, тестируемая программа не может превысить установленные ограничения.
Диагностирование ошибки превышения ограничения по памяти в системе ejudge работает, толко если установлен патч к ядру Linux. Если патч не установлен, превышение ограничения по памяти будет диагностировано как ошибка времени выполнения. Кроме того, система ejudge позволяет отключить диагностирование данной ошибки даже если патч к ядру установлен.
Хотя диагностирование данной ошибки может быть полезно для участников для отладки их решений, в большистве ситуаций граница между ошибкой при выполнении программы и ошибкой превышения ограничения по памяти оказывается очень размытой.
Например, если превышен максимальный размер стека из-за того, что программа вошла в бесконечную рекурсию, то такая ситуация должна скорее рассматриваться как ошибка при выполнении программы. Но с другой стороны, если программа попыталась выделить слишком много памяти в стеке (например, из-за слишком большого локального массива), такая ситуация должна рассматриваться как превышение ограничения по памяти. Естественно, невозможно простым способом четко различить эти две ситуации.
С другой стороны, например, в языке C функция malloc возвращает NULL, если память выделить не удалось. Если тестируемая программа не проверяет результат функции malloc на NULL и получает ошибку доступа по нулевому указателю, то это типичная ошибка программиста и должна рассматриваться как ошибка при выполнении программы. И наоборот, программа может отлавливать ситуации, когда malloc возвращает NULL, и модифицировать свое поведение (например, почистив хеш-таблицу).
Добавления в версии 3.12.0
Если тестируемые программы
запускаются в контейнерах,
для задачи установлено ограничение на
максимальный размер оперативной памяти,
и включен режим
обнаружения данной ошибки,
программа ej-suid-container эвристически определяет возникновение
ошибки превышения ограничения памяти.