155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||||||
1 | ||||||
Лимит памяти для решений задач07.02.2013, 04:47. Показов 4264. Ответов 17
Метки нет (Все метки)
Чем руководствуются авторы задач, устанавливая лимт памяти для программ-решений?
Например, простая задча. Её решение, сохранённое в текстовом режиме (блокнот) занимает на диске 4 килобайта.
Вопрос: Если это не обьём кода и не объём ехе-шника,то что это? Если это обьём памяти, используемый программой во время работы, то как грамотно установить его для конкретной задачи? И почему он в предложенной задаче аж 16 мегабайт?
1
|
07.02.2013, 04:47 | |
Ответы с готовыми решениями:
17
Разработать приложение в среде Lasarus для проверки решений задач заданного вида Лимит на кэширование памяти Лимит оперативной памяти в java Увеличить лимит памяти больше 1 гб |
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
07.02.2013, 11:09 | 2 |
Так же, как и время работы - исходя из предполагаемого метода решения. Так, чтобы слишком простые и неэффективные решения не прошли тест.
Думаю, просто так, потому что тут всё равно. Хотя надо учитывать, что в памяти будет exe'шник, несколько dll'ок, ещё стек какой-то размер уже изначально имеет.
1
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
07.02.2013, 11:20 [ТС] | 3 |
Но время вычислений можно измерить, скажем, средствами <time.h> внутри самой программы. А как измерить требуемый размер памяти. Ведь не наугад же он устанавливается авторами задач. К тому же тестирующей системе нужно как-то проверять, укладывается ли решение в лимит памяти...
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
07.02.2013, 11:58 | 4 |
LVV, ulimit + timeout - вот и все решение по ограничение
Авторами ограничения берутся видимо из существующих решений
0
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|||||||||||
07.02.2013, 13:19 [ТС] | 5 | ||||||||||
Не забывайте, чт это страничка для начинающих...
Простой вопрос: участник олимпиады решает конкретную задачу. Как ему конкретно узнать, какой обьём памяти использует его конкретное решение? Например, такое:
Но для большинства олимпиадых задач кроме тайм-лимита устанавливается ещё и лимит памяти. Вот меня и интересует, как его вычислить (определить). Что касается лимитов времени, то здесь нет проблем, потому что его можно определить, скажем, так:
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
07.02.2013, 14:34 | 6 |
Так, на глаз... Отдельная переменная - почти ничего, сам код - тоже немного. Так что достаточно посчитать размеры массивов, связных списков, деревьев и прочих крупных вещей.
1
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
07.02.2013, 14:52 [ТС] | 7 |
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
07.02.2013, 16:14 | 8 |
Методы, конечно, существуют. Только смысла особого не имеет точно измерять всё в таком случае.
0
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
07.02.2013, 17:58 [ТС] | 9 |
Я и не имел в виду только это случай.
Прото хотелось знать, если задаётся лимит времени, то как он определяется для каждой конкретной задачи и каждого конкреиного решения.
0
|
Higher
|
|
07.02.2013, 19:07 | 10 |
Ну это же от авторов задачи и тестирующей системы зависит. Обычно есть какой-то повседневный лимит, который устанавливается на многие задачи, для некоторых задач он понижается, для некоторых повышается. Ваша задача к некоторым не относится.
0
|
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
|
|
07.02.2013, 20:11 | 11 |
лимиты задаются, чтобы задачу не решали "в лоб", а применяли какие-то алгоритмы, которые авторы задачи "заложили".
Авторы задач решают свои задания, и исходя от своих решений указывают лимиты.
0
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
07.02.2013, 20:49 [ТС] | 12 |
В том то и дело: хотелось бы знать как они определяют лимиты для своих решений? Это делается особым программным обеспечением? Или средствами С++ в самом решении можно определить?
0
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
08.02.2013, 08:48 [ТС] | 14 |
То есть: мне нужно сидеть с калькулятором и подсчитывать, какой обьём занимает код, какой библиотеки, сколько потребуется на переменные, сколько уйдёт на массивчик... и т.д. и т.п. ???
Это тоже самое, что с секундомером определять, укладывается ли прорамма в лимит времени, или нет.
0
|
Higher
|
|
08.02.2013, 11:51 | 15 |
В подавляющем большинстве случаев нужно посчитать лишь размер самого большого контейнера(массива/списка/дерева/etc), это занимает несколько секунд.
Причем считается это только в том случае, если вы не уверены, что ваша программа пройдет ограничения на память. А это не так уж часто случается.
1
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
08.02.2013, 18:51 [ТС] | 16 |
Нашел решение своего же вопроса.
Зацикливаю процесс, запускаю программу и смотрю в диспетчере задач Windows сеолько памяти занято процессом. Вот только как это сделать средствами самого С++, пока не додумался...
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
08.02.2013, 23:46 | 17 |
Для винды: GetProcessMemoryInfo(), а там PagefileUsage или PrivateUsage из структурки. У линупсов есть procfs, откуда всё, что надо, можно прочитать.
1
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
08.02.2013, 23:46 | 18 |
С++ живёт на уровне своей библиотеки + libc. Такие вещи как потребление памяти и прочее распределено как правило между сишным менеджером памяти и непосредственно ОС.
Эта тема вообще бессмысленна сама по себе, так как вопросы распределения памяти к с++ мало относятся как ни крути. Можно различными системными вызовами попросить ОС (или libc) оценить используемую память (но там уже начнётся множество системных тонкостей: виртуальная память, страницы памяти итд)
1
|
08.02.2013, 23:46 | |
08.02.2013, 23:46 | |
Помогаю со студенческими работами здесь
18
Как облегчить код? Все работает, но упирается в лимит памяти Методика решений задач ActivePerl - Out of memory при работе с Oracle - как увеличить лимит памяти ПОЛЕЗНО! Примеры решений типовых задач Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |