Лёша-программист
(для непрограммеров пояснение в конце)
Захотел товарищ мой по имени Лёша сменить деятельность и с головой окунуться в программирование, потому как бабки в IT вертятся несметные, а начать можно с воплощения в реальность всего фонтана идей. На бейсике уже был опыт, поэтому можно уже и что-нибудь посерьёзнее, помощнее.
И выбрал себе C++.
Просмотрел кучу видео, накачал кучу PDF-файлов и принялся писать программу - давнюю задумку. Там что-то связано с тем, что она сможет давать точные рекомендации того, как нужно правильно смешивать красители, чтобы получить именно правильный оттенок цвета. В общем, как оказывается, проблема эта стоит в широких кругах очень остро, программы такой на рынке не существует, и если её продавать, то можно очень здорово навариться и, практически, не работать - если я всё правильно запомнил.
Почему не на андроиде, почему не на шарпе или JS - не знаю. Прям на C++, ведь это самый мощный язык - везде пишут, и прям под винду. Так правильнее, Лёше виднее. К тому же, программа будет заниматься широким спектром вычислений, подбор цвета - это только начало. Мощь очень нужна.
Уже на билдере (да, выбрал он эмдаркадеро, не visual studio) запилил мышкой интерфейс и перешёл к этапу непосредственно программирования. Сколько кода он там написал - сказать не берусь...
Но недолго программировалось. Утечки памяти? предупреждения компилятора? ХЗ, что это, но да и пофиг, и так запускается. Вскоре стали мешать работе недвусмысленные сообщения компилятора: "не хватает памяти".
С этим надо что-то делать, и Лёша пошёл в гугл. Проект-то нужный, перспективный, интересный! Значит, на память можно и потратиться - и заказал себе 32 ГБ оперативной памяти и стал ждать.
Я как-то спросил его, зачем ему память, - так и узнал, что компьютер-то у него бытовой, а для профессиональной деятельности нужен профессиональный компьютер.
После встречи с курьером, работа закипела с новой силой. Но почему-то снова что-то пошло не по плану. Несмотря на то, что оперативкой заняты все слоты, памяти всё равно не хватало. Компилятор буквально взывал: "Нельзя память только тратить, нужно её ещё и высвобождать! Удали ты всё временное, что понасоздавал, и создавай дальше сколько хочешь". Но на экране вместо этого высвечивался сухой безэмоциональный приговор: недостаточно памяти.
Причина была совершенно неясна. Ведь памяти много. Некоторое время пораскинув мозгами, в голове у Лёша прояснилось - видеокарта-то говно древнее.
И он снова отправился в гугл. Благо, дело шло к снижению ценников на видеокарты, решено было брать с запасом, с маркировкой "2080" с авито.
Скорее всего, видеокарту он купил рабочую, я не знаю - я не проверял. Он тоже не проверял, поскольку то ли места в корпусе не хватило, то ли слот не подошёл.
Он положил видеокарту на системный блок как безмолвное напоминание о том, что он должен будет обязательно её применить в достижении поставленной цели, должен потом вернуться к программированию сразу, как только сможет вставить эту карту в новый комп.
Живём мы с ним в разных городах, и на днях я к нему заезжал пообщаться. Перед отъездом в спешке на автобус включили его комп, написал ему в нескольких местах команду delete[] и оставил его, смотреть стеклянным взглядом в монитор.
Простыми словами: в языках программирования создал объект в памяти (пусть будет - строку) - попользовался, - нужно теперь удалить. На всё отдельная команда.
А бывает так - создал объект, забыл, что что-то создал, и создал ещё раз. И ссылку на старый объект потерял. Типа, как механическая рука-манипулятор на конвейере, которая может держать одновременно только один объект. Если положить в него второй, то рука уронит первого, оно вываливается под стол и так копится мусор. Т.е. объект в памяти есть, но где-то под столом, и теперь ты его не удалишь - он хз где. Со временем под столом гора, свободного места всё меньше и меньше. Какого бы объёма память не была, непрерывно прибывающий хлам её обязательно засрёт. Что и произошло.
Во многих языках есть автоматические сборщики мусора. Они ходят попятам программиста и если видят, что он ссылку на объект теряет (что-то из руки вываливается на пол), то уничтожают этот объект, ибо всё равно не нужен. А в C++ всё сам, всё сам. Ну, почти. Там тоже есть приёмы кое-какие, библиотеки всякие. Но за памятью нужно следить пристально.
IT-юмор
5.7K поста52.6K подписчик
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору