LINUX.ORG.RU

Зачем вызывать delete если программа сама завершается?

 


0

3

Пример. Есть процесс. Он потребляет память но не освобождает. Когда память закончится он перезапускается и все начинается по новой. Время перезапуска 1 секунда, никто и не заметит.


Ответ на: комментарий от XMs

Любая СУБД. Это совершенно нормальная ситуация когда взял и отвалился сервер с СУБД, транзакции для того и придумали.

Liz812
() автор топика

Есть процесс. Он потребляет память но не освобождает. Когда память закончится он перезапускается и все начинается по новой. Время перезапуска 1 секунда, никто и не заметит.

Это называется «сборка мусора» и делается на ходу, без перезапуска.

И да, секунду задержки ещё как заметят.

i-rinat ★★★★★
()

Гугли memory arena allocator. Не нужно перезапускать процесс, можно вместо этого полностью освобождать всю память в нужных местах.

Kuzy ★★★
()

Незачем. Очень многие пистонщики и рубисты так и делают: вырубают к чёртовой матери GC и перезапускают процесс когда память кончается. Главное, выключить swap.

hateyoufeel ★★★★★
()
Ответ на: комментарий от Liz812

А если не шланговать? Ситуация, когда сервер СУБД отвалился, ненормальна, она лишь должна быть проработана в пользовательских сценариях. Поэтому нормальные СУБД пишут так, чтобы они могли работать годами без остановки. Те, кто по каким-то причинам не хочет заниматься освобождением неиспользуемой памяти, пишут софт на языках со сборщиком мусора, например, той же жабе. Но и там софт не падает от того, что закончилась память. Софт вообще падать не должен

XMs ★★★★★
()
Последнее исправление: XMs (всего исправлений: 1)
Ответ на: комментарий от XMs

Абсолютно нормально. Трактор переехал кабель и весь ДЦ отвалился миллион клиентов вместе с ним. Клиент просто переключается на копию если она есть и работает с ней, но транзакции будут незавершены.

Liz812
() автор топика

Всем auto& foo = *new Foo {}; в этом чате.

Kuzy ★★★
()
Ответ на: комментарий от Liz812

Ненормальна. Хотя бы потому, что «трактор переехал кабель» — явление, которое не спрогнозировать. Поэтому обычно есть несколько географически отдалённых серверов, как-то реплицирующих между собой данные. Нормальная ситуация — железо в порядке, системное окружение в порядке, система на вход получает пользовательские данные и команды и как-то на них реагирует. Те или иные форс-мажоры учтены, поэтому глобально система не упадёт. В случа с трактором — хорошо, действительно, потеряется транзакция, и только. Соединения оборвутся, СУБД это заметит и сможет заняться чем-то другим, например, кэши сбросит. А вот в случае падения приложения всё будет совсем не так. Если были кэши — данные пропадут. Если шла запись — запишется мусор, или не запишется вообще, если был в буфере. Взаимодействие с другими процессами? Пока-пока — они не узнают, что СУБД упала. Короче, надёжность у описываемого продукта никакая. Поэтому я и спрашиваю, как он называется, чтобы избегать в будущем

XMs ★★★★★
()

Он потребляет память но не освобождает. Когда память закончится он перезапускается и все начинается по новой. Время перезапуска 1 секунда, никто и не заметит.

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

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от SZT

Почему потеряла? Она замечает, что памяти осталось мало и сама завершает работу выполняя что там надо. Скрипт это видит и запускает ее по новой. Если это раз в сутки вполне нормально.

Liz812
() автор топика

Есть сценарии, где это уместно, но подходить к этому надо осторожно и обдуманно.

dave ★★★★★
()
Ответ на: комментарий от Liz812

Почему потеряла? Она замечает, что памяти осталось мало и сама завершает работу выполняя что там надо

А если у тебя программа на 50% закончила моделирование какой-то фигни, и никто не написал особой процедуры чтоб сохранить состояние этого моделирования чтоб потом его загрузить и продолжить?

SZT ★★★★★
()
Ответ на: комментарий от Harald

вот, судя по логике ТС, пациента нужно убивать до того, как он заболел

r0ck3r ★★★★★
()
Ответ на: комментарий от Deleted

Когда ты написал слово «резидент», то XMs подумал, что это ты отвечаешь на вопрос о том, чьей реинкарнацией является ТС. Был тут такой rezedent12 по кличке Светоч

r0ck3r ★★★★★
()

Правильный и логичный подход. На старте выделить через brk сколько надо, а вместо malloc/new написать аллокатор, который будет возвращать адрес начала свободного места. При нехватке места - сохраняемся и все на выход.

anonymous
()
Ответ на: комментарий от deep-purple

Мой вопрос о названии продукта и списка компаний, которые его используют, тоже игнорирует. Буду по старинке военным постгрес из Астровских репозиториев ставить

XMs ★★★★★
()

Тебе delete лень написать? Пользуйся языком с уборкой мусора тогда.

anonymous
()
  1. «Когда память закончится» - это в большинстве случаев аварийная ситуация, допускать которую нельзя. Да, можно конечно задать жесткий лимит для конкретного приложения, но тогда см. п.2

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

  3. Это тупо неэффективно расходует память компьютера, для многих видов программ это важно, т.к. позволяет на том же объеме выполнить задачу намного большего размера

  4. Если речь конкретно об операторе delete из C++, то он вызывает деструктор объекта, который может освобождать ресурсы, не являющиеся памятью, которые ОС сама освободить не сможет

annulen ★★★★★
()
Ответ на: комментарий от anonymous

Зачем рожать, если все равно умрет?

Вот кстати да.

Более того, считаю тех кто рожает самыми жестокими и эгоистичными существами на земле. Ради своих желалок они обрекают новое существо на короткий промежкток беззаботной жизни с неизбежным уведанием и страданиями в конце. Потом сами это поймут.

bonta ★★★★★
()
Ответ на: комментарий от Liz812

Да, но ты её туда хочешь ввести. Об этом эта тема.

bonta ★★★★★
()
Ответ на: комментарий от Liz812

Если это раз в сутки вполне нормально.

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

Oberstserj ★★
()

А если не перезапустится, а выжрет всё к херам? Такое бывает во всяких кровавых Java 🤣и пользователи кровью срут от таких утечек памяти внутри Java

menangen ★★★★★
()

Я думаю, тебя самого надо перезапустить. Либо за дебилизм, либо за толстый троллинг.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от fsb4000

Для пацанов родил - https://godbolt.org/z/-8Jqw3 - залей, пж, холопам - пусть тестят/бенчат. А то что-то там совсем непорядок.

Оно в 1.5 раза быстрее раст-говна и в 2раза быстрее пту-говна. Но в любом случае - всё это мусор нелепый и заниматься этим мне лень.

В основном делал как ответ на потуги «у меня для всех типов в одном файле - как сделать не пожрав говна?».

anonymous
()
Ответ на: комментарий от fsb4000

спс. Правда собирается это всё и без всяких систем - git clone + -I

git clone https://github.com/boostorg/hana.git
git clone https://github.com/fmtlib/fmt.git

g++ -I./hana/include -I./fmt/include -DFMT_HEADER_ONLY ...прочие флаги из godbolt

anonymous
()
Ответ на: комментарий от fsb4000

Забыл написать о том как юзать ./proga float < input.blob соответственно вместо флоат могут быть ./proga float|double|uint64_t|uint32_t < input.blob

Я проверял только на float - вроде работает.

anonymous
()

Видимо ТС хотел спросить.
Приложение запрашивает память с использованием API ОС,
следовательно при завершении приложения вся память будет
возвращена автоматически самой ОС и зачем тогда вообще
беспокоиться об освобождении памяти.

Владимир

anonymous
()
Ответ на: комментарий от Deleted

Непоздно перечитать, там чтива на пару дней. Главное следи чтобы крыша не поехала. Все-таки Светоч в числе 3% самых умных людей планеты!..

Oberstserj ★★
()
Ответ на: комментарий от fsb4000

$ time ./rpn_eval_cpp float < input.txt 
3.0492005

real    0m1,193s
user    0m1,152s
sys     0m0,041s


$ time ./rpn_eval_cpp_clang float < input.txt 
3.0492005

real    0m1,163s
user    0m1,106s
sys     0m0,056s


$ time ./rpn-eval 
3.0492005

real    0m1,890s
user    0m1,745s
sys     0m0,145s

$ time racket rpn.rkt 
3.0492005348205566

real    0m1,981s
user    0m1,802s
sys     0m0,178s

Вот нормальные результаты при 992M input.txt - здесь действительно его говно примерно равно говнорасту, но на 8 гигах оно в хлам ему сливает.

На чём там этот инвалид 40 секунд намерил - я не знаю. На сене наверное.

anonymous
()

Ресурс не обязательно только память.

pon4ik ★★★★★
()
Ответ на: комментарий от Liz812

А что сразу не через интерпритатор питона, который каждый раз запускать через баш скрипт? Через него всяко удобнее с процессами работать )

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.