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

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

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


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


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

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

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


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


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

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


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


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

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


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


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


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


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

IT-юмор

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

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

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

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

5
Автор поста оценил этот комментарий
Как человеку далёкому от программирования, можете пояснить в чем проблема была и чем команда delete помогла ))
раскрыть ветку (1)
4
Автор поста оценил этот комментарий

добавил в конце поста, надеюсь, поможет.

6
Автор поста оценил этот комментарий

delete[]

а лучше тогда открыть в браузере описание std::vector либо std::deque, ну и умные указатели уже в довесок.

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

"delete[]" - я здесь применил как собирательный образ работы с памятью.

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

Именно сам факт того, что с ней нужно прям работать - его сильно расстроил.

показать ответы
1
Автор поста оценил этот комментарий

А што, Буилдер еще жив? Последний раз на нем писал лет 15 назад.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Если бы не этот товарищ, который умудрился найти среду, я б и не знал.

Собственно, https://www.embarcadero.com/ru/products/cbuilder


Скачал он её, конечно, с торрентов. А набрёл на неё следующим образом: хотел, чтобы в C++ формочки рисовались как на VB6.0. Искал, вопрошал - и нашёл вот эмбаркадеро.

показать ответы
6
Автор поста оценил этот комментарий

Это "авторский рассказ", судя по стилю и правдивости.

раскрыть ветку (1)
7
Автор поста оценил этот комментарий

хех, сейчас бы по стилю изложения оценивать правдивость.

На самом деле в оценке правдивости самую главную роль играет личный опыт - было ли что-то похожее в своей жизни или нет.

2
Автор поста оценил этот комментарий

извините был в отъезде (pl/sql ....)

это новая мода писать что компилятору памяти не хватает когда ее не хватает программе ?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я глубоко извиняюсь за столь грубую формулировку.

показать ответы
31
Автор поста оценил этот комментарий
Чёрт подери, вспоминаю 3й курс технаря, где девченка писала на делфи 7 тесты по математике для школьников. О том что можно вопросы запихнуть в массив и выводить динамически она не догадалась и пришла к преподавателю с вопросом на непонятную ошибку при создании новой формы. В ходе беглого разбора выяснилось что у неё каждый вопрос это форма и на Form 237 делфа просто сказала "с меня хватит", либо же это сказали тогдашние 128 метров оперативы
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

какая трудолюбивая!

показать ответы
Автор поста оценил этот комментарий

А можно было все в екселе накидать за неделю )

раскрыть ветку (1)
Автор поста оценил этот комментарий

а как же реализация великих планов? А коммерческое распространение?

показать ответы
DELETED
Автор поста оценил этот комментарий

Там в любой статье про выделение памяти через new рассказывается, что память надо отчищать delete имя или delete [ ] имя. Он не мог пропустить эту часть! А вообще лучше научится пользоваться умными указателями и забыть про травиальные проблемы.

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

1
Автор поста оценил этот комментарий
Во многих языках есть автоматические сборщики мусора. Они ходят попятам программиста и если видят, что он ссылку на объект теряет

Ну не совсем так. Например в том же C# это не "подчищалка за программистом", а часть всей парадигмы программирования. Там даже нет способа освободить объект вручную из кода, как такового.

раскрыть ветку (1)
Автор поста оценил этот комментарий

я хотел написать максимально сжато с акцентом на образное представление сути проблемы

2
Автор поста оценил этот комментарий

Задача, судя по формулировке, хорошо решается в каком-нибудь экселе

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

формулировку он мне рассказывал минут 15-20. Но тема мне настолько катастрофически не близка, что я запомнил из неё только что-то про смешение красок.

показать ответы
4
Автор поста оценил этот комментарий

Пост вооще уй пойми о чем. Автор выдавливает из себя злорадство по поводу того что его товарищ учит сложный для новичка язык,  наступает на грабли но не сдаётся а идет дальше? Респект его товарищу а автору минус и позор

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

да! да! чёрт возьми, в точку!!!))) Блин, ну хоть один догадался.