| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Ограничение используемой программой памяти |
| Автор: rudvil 3.4.2010, 00:04 | ||||
| Нужно как-то ограничить используемую программой память, например как в php. Выставил в настройках скажем "20 мб" и выше этой планки программа потреблять памяти не будет. Насколько я понимаю, мне нужно перегрузить используемый мною оператор "new" / "delete", и при каждой попытке выделении памяти, увеличивать счетчик, ну и при удалении уменьшать счетчик соотвественно... С "new" проблем не возникло...
не могу нигде найти информацию по этому...
т.е. как в этих случаях можно узнать размер удаляемого блока("mem")? Чтобы можно было уменьшить счетчик используемой памяти... з.ы. операторы перегружаю глобально |
| Автор: 586 3.4.2010, 02:37 |
| http://msdn.microsoft.com/en-us/library/z2s077bc%28VS.80%29.aspx |
| Автор: rudvil 3.4.2010, 11:41 | ||
Спасибо, то что нужно Но это как я понял только под винду =/ есть ли кроссплатформенные аналоги этой структуры? |
| Автор: Rickert 3.4.2010, 16:35 |
| А я бы не писал перегрузку new/delete - это слишком тонкая штука, с которой легко ошибиться. Вместо этого я бы создал свои классы, которые бы сами выделяли память и чистили её, под определённые типы данных (массивы, списки т.п.)? при этом держали бы объём в постоянном сравнении с максимальной величиной. Кроссплатформенно и безопасно |
| Автор: rudvil 4.4.2010, 15:20 | ||
Возможно я так и поступлю, спасибо. Хотелось бы узнать как можно ошибиться если я использую всеголишь malloc и free...? |
| Автор: jonie 4.4.2010, 16:02 |
| можно еще глянуть на альтернативные менеджеры памяти: http://stackoverflow.com/questions/858592/windows-malloc-replacement-e-g-tcmalloc-and-dynamic-crt-linking возможно, в них уже есть встроенные фичи, которые вам нужны... |
| Автор: rudvil 7.4.2010, 10:26 | ||||
А вот это уже интересно... 2bsa, ваш вариант понравился больше всего, начну его использовать. Всем большое спасибо за помощь, решение найдено. |
| Автор: rudvil 7.4.2010, 13:08 | ||
Возник ещё 1 вопрос
http://stackoverflow.com/questions/1208644/how-can-i-get-the-size-of-a-memory-block-allocated-using-malloc/1208728#1208728. Код рабочий, всё ок. Я только не пойму одного, зачем добавлять + 1 если мы и так уже сместили указатель выделяемого блока на (size_t*) ? |
| Автор: bsa 7.4.2010, 14:29 | ||
Кстати, я бы не изменял size на размер size_t, так как в последующих вычислениях придется постоянно вычитать. |
| Автор: rudvil 7.4.2010, 15:45 | ||||
Извиняюсь, ступил... все верно. А насчет вычислений, я не имею ничего против вычитаний. =] |
| Автор: bsa 7.4.2010, 16:49 |
| Это называется пессимизация - т.е. выполнение лишних операций. |
| Автор: rudvil 7.4.2010, 17:12 | ||
Поначалу не так вас понял Согласен, спасибо |