Лёша-программист

(для непрограммеров пояснение в конце)

Захотел товарищ мой по имени Лёша сменить деятельность и с головой окунуться в программирование, потому как бабки в IT вертятся несметные, а начать можно с воплощения в реальность всего фонтана идей. На бейсике уже был опыт, поэтому можно уже и что-нибудь посерьёзнее, помощнее.


И выбрал себе C++.


Просмотрел кучу видео, накачал кучу PDF-файлов и принялся писать программу - давнюю задумку. Там что-то связано с тем, что она сможет давать точные рекомендации того, как нужно правильно смешивать красители, чтобы получить именно правильный оттенок цвета. В общем, как оказывается, проблема эта стоит в широких кругах очень остро, программы такой на рынке не существует, и если её продавать, то можно очень здорово навариться и, практически, не работать - если я всё правильно запомнил.

Почему не на андроиде, почему не на шарпе или JS - не знаю. Прям на C++, ведь это самый мощный язык - везде пишут, и прям под винду. Так правильнее, Лёше виднее. К тому же, программа будет заниматься широким спектром вычислений, подбор цвета - это только начало. Мощь очень нужна.

Уже на билдере (да, выбрал он эмдаркадеро, не visual studio) запилил мышкой интерфейс и перешёл к этапу непосредственно программирования. Сколько кода он там написал - сказать не берусь...


Но недолго программировалось. Утечки памяти? предупреждения компилятора? ХЗ, что это, но да и пофиг, и так запускается. Вскоре стали мешать работе недвусмысленные сообщения компилятора: "не хватает памяти".


С этим надо что-то делать, и Лёша пошёл в гугл. Проект-то нужный, перспективный, интересный! Значит, на память можно и потратиться - и заказал себе 32 ГБ оперативной памяти и стал ждать.

Я как-то спросил его, зачем ему память, - так и узнал, что компьютер-то у него бытовой, а для профессиональной деятельности нужен профессиональный компьютер.


После встречи с курьером, работа закипела с новой силой. Но почему-то снова что-то пошло не по плану.  Несмотря на то, что оперативкой заняты все слоты, памяти всё равно не хватало. Компилятор буквально взывал: "Нельзя память только тратить, нужно её ещё и высвобождать! Удали ты всё временное, что понасоздавал, и создавай дальше сколько хочешь". Но на экране вместо этого высвечивался сухой безэмоциональный приговор: недостаточно памяти.


Причина была совершенно неясна. Ведь памяти много. Некоторое время пораскинув мозгами, в голове у Лёша прояснилось - видеокарта-то говно древнее.

И он снова отправился в гугл. Благо, дело шло к снижению ценников на видеокарты, решено было брать с запасом, с маркировкой "2080" с авито.


Скорее всего, видеокарту он купил рабочую, я не знаю - я не проверял. Он тоже не проверял, поскольку то ли места в корпусе не хватило, то ли слот не подошёл.


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


Живём мы с ним в разных городах, и на днях я к нему заезжал пообщаться. Перед отъездом в спешке на автобус включили его комп, написал ему в нескольких местах команду delete[] и оставил его, смотреть стеклянным взглядом в монитор.


Простыми словами: в языках программирования создал объект в памяти (пусть будет - строку) - попользовался, - нужно теперь удалить. На всё отдельная команда.
А бывает так - создал объект, забыл, что что-то создал, и создал ещё раз. И ссылку на старый объект потерял. Типа, как механическая рука-манипулятор на конвейере, которая может держать одновременно только один объект. Если положить в него второй, то рука уронит первого, оно вываливается под стол и так копится мусор. Т.е. объект в памяти есть, но где-то под столом, и теперь ты его не удалишь - он хз где. Со временем под столом гора, свободного места всё меньше и меньше. Какого бы объёма память не была, непрерывно прибывающий хлам её обязательно засрёт. Что и произошло.
Во многих языках есть автоматические сборщики мусора. Они ходят попятам программиста и если видят, что он ссылку на объект теряет (что-то из руки вываливается на пол), то уничтожают этот объект, ибо всё равно не нужен. А в C++ всё сам, всё сам. Ну, почти. Там тоже есть приёмы кое-какие, библиотеки всякие. Но за памятью нужно следить пристально.

IT-юмор

5.7K поста52.6K подписчик

Добавить пост

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору