Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
1

Лимит памяти для решений задач

07.02.2013, 04:47. Показов 4264. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Чем руководствуются авторы задач, устанавливая лимт памяти для программ-решений?
Например, простая задча.
Её решение, сохранённое в текстовом режиме (блокнот) занимает на диске 4 килобайта.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << n/10 << " " << n%10 << endl;
return 0;
}
Откомпилированный файл (exe-шник) занимает меньше одного мегабайта (VisualStudio).
Вопрос: Если это не обьём кода и не объём ехе-шника,то что это?
Если это обьём памяти, используемый программой во время работы, то как грамотно установить его для конкретной задачи? И почему он в предложенной задаче аж 16 мегабайт?
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2013, 04:47
Ответы с готовыми решениями:

Разработать приложение в среде Lasarus для проверки решений задач заданного вида
Разработать приложение в среде Lasarus для проверки решений задач следующего вида: Петя записал...

Лимит на кэширование памяти
Есть проблемы с кэшированием памяти. Жрет дико много, вылетают игры. Начнем с предполагаемых...

Лимит оперативной памяти в java
здравствуйте. вопрос не по программированию, но гугл послал к вам по умолчанию java может...

Увеличить лимит памяти больше 1 гб
Есть скрипт, который должен держать в памяти сразу много данных. ОЗУ 8ГБ. Ставлю в конфиге пхп...

17
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
07.02.2013, 11:09 2
Цитата Сообщение от LVV Посмотреть сообщение
Если это обьём памяти, используемый программой во время работы, то как грамотно установить его для конкретной задачи?
Так же, как и время работы - исходя из предполагаемого метода решения. Так, чтобы слишком простые и неэффективные решения не прошли тест.
Цитата Сообщение от LVV Посмотреть сообщение
И почему он в предложенной задаче аж 16 мегабайт?
Думаю, просто так, потому что тут всё равно. Хотя надо учитывать, что в памяти будет exe'шник, несколько dll'ок, ещё стек какой-то размер уже изначально имеет.
1
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
07.02.2013, 11:20  [ТС] 3
Цитата Сообщение от Somebody Посмотреть сообщение
Так же, как и время работы - исходя из предполагаемого метода решения...
... надо учитывать, что в памяти будет exe'шник, несколько dll'ок, ещё стек какой-то размер уже изначально имеет.
Но время вычислений можно измерить, скажем, средствами <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
Цитата Сообщение от alex_x_x Посмотреть сообщение
LVV, ulimit + timeout - вот и все решение по ограничение
Авторами ограничения берутся видимо из существующих решений
Не забывайте, чт это страничка для начинающих...
Простой вопрос: участник олимпиады решает конкретную задачу. Как ему конкретно узнать, какой обьём памяти использует его конкретное решение? Например, такое:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main()
{
long long s=0;
for(int i=1; i<10000; i++)
for(int j=i; j<10000; j++)
s+=(i*j);
cout << s << endl;
return 0;
}
Может я по своей малограмотности что-то не так формулирую, тогда извините.
Но для большинства олимпиадых задач кроме тайм-лимита устанавливается ещё и лимит памяти.
Вот меня и интересует, как его вычислить (определить).
Что касается лимитов времени, то здесь нет проблем, потому что его можно определить, скажем, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
long long s=0;
clock_t start,finish;
start = clock();
for(int i=1; i<10000; i++)
for(int j=i; j<10000; j++)
s+=(i*j);
finish = clock();
cout << s << endl
<< finish-start;
return 0;
}
А каким образом я могу определить обьём памяти, используемый данным решением?
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
Цитата Сообщение от Somebody Посмотреть сообщение
Так, на глаз... Отдельная переменная - почти ничего, сам код - тоже немного. Так что достаточно посчитать размеры массивов, связных списков, деревьев и прочих крупных вещей.
Жаль. Я думал, существуют определённые методы...
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
07.02.2013, 16:14 8
Цитата Сообщение от LVV Посмотреть сообщение
Жаль. Я думал, существуют определённые методы...
Методы, конечно, существуют. Только смысла особого не имеет точно измерять всё в таком случае.
0
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
07.02.2013, 17:58  [ТС] 9
Цитата Сообщение от Somebody Посмотреть сообщение
Методы, конечно, существуют. Только смысла особого не имеет точно измерять всё в таком случае.
Я и не имел в виду только это случай.
Прото хотелось знать, если задаётся лимит времени, то как он определяется для каждой конкретной задачи и каждого конкреиного решения.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.02.2013, 19:07 10
Цитата Сообщение от LVV Посмотреть сообщение
Прото хотелось знать, если задаётся лимит времени, то как он определяется для каждой конкретной задачи и каждого конкреиного решения.
Ну это же от авторов задачи и тестирующей системы зависит. Обычно есть какой-то повседневный лимит, который устанавливается на многие задачи, для некоторых задач он понижается, для некоторых повышается. Ваша задача к некоторым не относится.
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
Цитата Сообщение от ZoRT Посмотреть сообщение
лимиты задаются, чтобы задачу не решали "в лоб", а применяли какие-то алгоритмы, которые авторы задачи "заложили".
Авторы задач решают свои задания, и исходя от своих решений указывают лимиты.
В том то и дело: хотелось бы знать как они определяют лимиты для своих решений? Это делается особым программным обеспечением? Или средствами С++ в самом решении можно определить?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
07.02.2013, 20:56 13
Цитата Сообщение от LVV Посмотреть сообщение
Это делается особым программным обеспечением?
Если Вы пишите программу, вы же знаете сколько памяти она кушает =) плюс всякие библиотеки и т.д.
0
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
08.02.2013, 08:48  [ТС] 14
Цитата Сообщение от Croessmah Посмотреть сообщение
Если Вы пишите программу, вы же знаете сколько памяти она кушает =) плюс всякие библиотеки и т.д.
То есть: мне нужно сидеть с калькулятором и подсчитывать, какой обьём занимает код, какой библиотеки, сколько потребуется на переменные, сколько уйдёт на массивчик... и т.д. и т.п. ???
Это тоже самое, что с секундомером определять, укладывается ли прорамма в лимит времени, или нет.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.02.2013, 11:51 15
Цитата Сообщение от LVV Посмотреть сообщение
То есть: мне нужно сидеть с калькулятором и подсчитывать, какой обьём занимает код, какой библиотеки, сколько потребуется на переменные, сколько уйдёт на массивчик... и т.д. и т.п. ???
В подавляющем большинстве случаев нужно посчитать лишь размер самого большого контейнера(массива/списка/дерева/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
Цитата Сообщение от LVV Посмотреть сообщение
Вот только как это сделать средствами самого С++, пока не додумался...
Для винды: GetProcessMemoryInfo(), а там PagefileUsage или PrivateUsage из структурки. У линупсов есть procfs, откуда всё, что надо, можно прочитать.
1
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.02.2013, 23:46 18
Цитата Сообщение от LVV Посмотреть сообщение
Нашел решение своего же вопроса.
Зацикливаю процесс, запускаю программу и смотрю в диспетчере задач Windows сеолько памяти занято процессом.
Вот только как это сделать средствами самого С++, пока не додумался...
С++ живёт на уровне своей библиотеки + libc. Такие вещи как потребление памяти и прочее распределено как правило между сишным менеджером памяти и непосредственно ОС.

Эта тема вообще бессмысленна сама по себе, так как вопросы распределения памяти к с++ мало относятся как ни крути.

Можно различными системными вызовами попросить ОС (или libc) оценить используемую память (но там уже начнётся множество системных тонкостей: виртуальная память, страницы памяти итд)
1
08.02.2013, 23:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2013, 23:46
Помогаю со студенческими работами здесь

Как облегчить код? Все работает, но упирается в лимит памяти
stroki = chisla = s = 0 for i in range(int(input())): stroki.append(input()) number =...

Методика решений задач
Ребят помогите, как решить эту задачу)) Методом анализа размерностей оценить период колебаний...

ActivePerl - Out of memory при работе с Oracle - как увеличить лимит памяти
Здравствуйте. При запуске скрипта ActivePerl (WinXP 32) - возникает ошибка &quot;Out of memory&quot; ...

ПОЛЕЗНО! Примеры решений типовых задач
https://www.cyberforum.ru/matlab/thread915743.html ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru