|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
Когда выделять память08.10.2020, 18:18. Показов 16542. Ответов 201
Метки динамическая память (Все метки)
вот завис в моём понимании этот пункт:
когда выделять поток - в принципе поняла, когда выделять класс - в принципе поняла (чтобы разорвать зависимости) КОГДА выделять память?.. - всё-таки ещё не всегда очень хочется её выделять, чтобы потом удалять... но даже не в этом суть... а смысл первой цитаты? поделитесь please опытом кто-нибудь - когда вы выбираете создать объект на стеке, а когда вы выбираете создать объект в куче?. - какие есть предпосылки для вашего выбора? не хочу потом всё переделывать - а мне всё равно кажется, что на стеке всегда быстрее, а когда и почему лучше куча не знаю... а то ведь могу написать что попало...логично, что на стеке - определена последрвательность, но ведь при обращении к разным объектам проблем вроде не бывает... имхо... и понятно, что через стек идут параметры функций - так что получается, всё остальное, т.е. вообще всё лучше располагать в куче? какую проблему можно получить, если всё располагать на стеке? и в каком случае вообще app не запуститься при таком подходе (есть ли такая опасность)?.. есть ли какие-то критерии "must do"? и никак иначе
0
|
|||
| 08.10.2020, 18:18 | |
|
Ответы с готовыми решениями:
201
Как лучше выделять память: динамичски или в стэке?
Как динамически выделять память на один элемент массива? |
|
Комп_Оратор)
|
||
| 03.11.2020, 11:31 | ||
|
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 03.11.2020, 12:20 | |||
|
1
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 09.11.2020, 15:08 [ТС] | |||
|
а Всё свелось к тому, что предыдущие ораторы даже Стандарт 98/03 не смогли понять… - начав рисовать свои страшилки на последних нескольких страницах…
А Суть ответа на вопрос ветки сводится к 2м ключевым моментам: - “Хочешь управлять памятью – пиши на С”; - Язык С++ - статически типизирован… - основы понятные даже начинающему (но не троллям) – “все типы существуют на этапе компиляции” ИТОГО: можно создать простую систему типов (и даже здесь обойтись без явного выделения памяти, отдав – уже отдана - эту ответственность самой библиотеке) и банального Коснструктора почти всегда вполне достаточно, чтобы не разводить панику Фабриками… которые можно, конечно, подрядить для динамической аллокации полиморфных объектов – но вопрос №1 нужен ли вам полиморфизм ценой виртуальности… тогда просто помнить, что виртуальным Коструктор не может быть по сути вещей… === Вобщем (адекватным посетителям ветки): ? нужно вам Позднее Связывание – если выбираете реализовывать полиморфизм Наследованием – скатертью дорожка – динамически выделяйте память… чтобы не переживать о том, что нет виртуального Конструктора… можете фабрикой динамически аллоцировать память (и то – лишь в случаях когда даже простого конструктора вам не хватает)… Кликните здесь для просмотра всего текста
если смогли реализовать дизайн классов с static creating methods и скомпилировать свой код – а почти всегда можно выехать на Раннем связывании - радуйтесь жизни без головной боли от таких троллей, которые из книжки только название её автора смогли прочитать… чтобы ссылаясь на всех, кого не лень (включая Qt) нести свой бред… и с которыми предметный диалог в принципе невозможен - т.к. предмета не поняли... === и вся немощность предыдущих ораторов в понимании, чего они нагородили, и главное – зачем, - становится очевидной – тупо побросались и навороты таких иерархий гуру-троллинга, которые в своих игрушках-стрелялках обычно пытаются наделить своих горе-недоделанных-персонажей хоть каким-то функционалом – как правило, и выливается в динамическую аллокацию полиморфных объектов … а по факту в тормоза в run-time’e… - в эти игрушки они ещё не наигрались – возомнив себя Биллами Гейтсами… у меня они уже в листе_игнора ![]() Добавлено через 23 минуты ... но практически - не забывать момент scope'ов:
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
| 13.11.2020, 19:39 [ТС] | ||||
|
new
p.s. и главное, мне кажется, я поняла, - всё, что закладываем в compile-time (если речь о templates и даже overloads) - всё-таки раздувает size app'a... а иерархии дают возможность переопределять что-то в run-time'e - и т.к. речь о виртуальных функциях, а функции и их параметры обрабатываются в ЦП, который быстрый! (уже ведь не в прошлом тысячелетии живём)... то соотношение app size(меньше)/speed(примерно на равных) - вполне приемлемо... хотя конечно виртуальный size становится побольше (т.е. ram всё равно кушается при использовании app'a)... -- вот тут для полиморфных классов и приходится динамически выделять память (ведь заранее не знаем, какого child'a придётся подрядить, только в процессе становится известно)... ну и чтобы удалять по-современному - shared_ptr (для полиморфных класов, для MT app'ов, для passing DLL boundaries, recently used cache и преодоления проблемы unreachable memory, если ide не предупредила об утечке памяти) ... === только нечего мне пока переопределять, т.к. нет иерархии, подклассы которой должны обрабатываться, как одна сущность, - у каждого класса свой путь... вот и не нуждалась ни в полиморфизме, ни в смарт-пойнтерах... ни тем более в переопределении в run-time'e... ни даже в указателях выходящих из scope'a... ?? думаю, что просто передача обрабатываемых объектов из функции в функцию того же (обрабатывающего) объекта не считается выходом из scope'a - если обрабатываемый объект передаётся в конструктор обрабатывающего объекта... === возможно, с перемещением можно поколдовать... но в принципе идиома U++ "всё кому-то принадлежит" ещё не давала сбоев для меня... да и heap там своя... да и разработчики U++ сами в него вносят все новшества языка... поэтому, пока выбираю вариант take-as-is... без чёрной магии move'a и смарт-пойнтеров на чужой куче... раз пока мои несложные задачи прекрасно вписываются в заложенную в U++ концепцию - "всё кому-то принадлежит"... но вроде они уже и без меня move'ят...
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 13.11.2020, 19:53 | ||
|
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
| 13.11.2020, 20:57 [ТС] | ||||
![]() Добавлено через 41 минуту - в связи с этим - заключительный вывод:
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 13.11.2020, 21:01 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 14.11.2020, 08:24 [ТС] | |||
|
shared_ptr всё-таки имеет copy-семантику... - но не дадо забывать, что речь лишь об указателе!.. сам участок выделенной памяти никаким боком никуда не двигается, пока не будет удалён последний указатель на него - тогда и вызовется deleter, точнее указатель на него пришитый к умному указателю... имхо в отличие от unique_ptr, имеющего move-семантику - права владения (следовательно, и контроль жизни) на него можно передать другому объекту (вместе с deleter'ом) - но опять же не будет совместных прав владения (и контроля ж.ц.) - владелец всегда ОДИН - будет просто передача эксклюзивных прав собственности на жизнь объекта-под-указателем ===
=== === вот только при наследовании от 2х интерфейсов - там в статье по линку (предыдущего поста) - какие-то расплывчатые ходы unique_ptr'ами в начале (вобщем не дочитала ещё - хочу сама ещё подумать над реализацией такой новинки - если понадобится - но если там речь об интерфейсах - абстрактных классах - то вопрос о том, кто породил отпадает, т.к. нельзя создать объект абстрактного класса - возможно, unique_ptr для наследника тех интерфейсов и создателя и владельца на ж.ц. и нужен - но как он запустит виртуальный деструктор - значит лучше shared_ptr, который в принцмпе для работы с полиморфными объектами ок -- вобщем там ещё статью по линку оттуда дочитать надо...) ... а вообще очень смахивает на C#
0
|
|||
| 14.11.2020, 10:10 | |
|
Не по теме: Отписался)
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 15.11.2020, 14:04 [ТС] | ||
|
Вот и развязка:
динамический полиморфизм можно заменить статическим полиморфизмом, используя template, как base... но и у этого есть своя цена:
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
| 16.11.2020, 19:35 [ТС] | ||||
|
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.11.2020, 19:47 | ||
|
1
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 16.11.2020, 20:14 [ТС] | ||
|
ну разве что, как указывали, для сохранения lifetime при выходе из scope'a - нужен new... "Nicely organized class system is enough to avoid dynamic polymorphism in most cases" - понравилась мне эта фраза где-то на просторах сети.....
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 16.11.2020, 20:18 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 16.11.2020, 20:24 [ТС] | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 17.11.2020, 00:14 | ||||
|
1
|
||||
|
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
|
|
| 17.11.2020, 00:29 | |
|
У меня есть два правила.
1) Если можно не выделять память - Можно, я не буду её выделять. 1.1) Почему ? - Потому что я могу расположить переменную либо в функции, либо в описывающем классе. - А дальше передавать переменную по ссылке. 2) Но если всё таки нужно выделять память? - То я буду её выделять для строк\массивов(Любого типа) и данных - которые способны динамически изменяться во время работы программы.
1
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||
| 17.11.2020, 14:49 [ТС] | |||||
|
источник динамического полиморфизма - virtual, результат - позднее связывание (кстати не так уж редко встречающееся, например, в том же vba и не так уж плохо работающее - если подключить надо ту же Scripting.Dictionary библу в vba)... в принципе virtual функции и dll-ресурсы - думаю, что сопоставимы по скорости, т.е. медленнее, чем методы статическиех объектов ... ну или в wrapper можно завернуть контейнер - но тоже не вижу необходимости для вектора - только если по причине, указанной DrOffset, - в принципе, так класс можно сделать более универсальным ("хотя писать код про запас - вредно" )...имхо - оставновилась пока на таком видении... p.s. просто вот передаю строку из одного метода-члена в другой метод-член класса... результат - как только поставлю тормоза - всё работает... тормоза убираю - получаю отработку по началу массива и по последней загруженной во 2-й метод строке и массива выданного из неё... а данные между (др. строки, которые тоже должны вернуться из 2-го метода массивами) - теряю... когда нет тормозов... причины могут быть разные - от скорости сети, вариаций с константностью, реакции сервера на запросы, колотящие по нему, чужая куча и всё что угодно... вот и думаю: - то ли эту обработку строки (во 2-м методе-члене) вынести в отдельный интерфейс и наследовать от него (хотя толку не вижу - он мне больше нигде не нужен)... вроде по правилам SingleResponsibility или InterfaceSegregation надо бы, но (толку... см. предыдущие скобки)... - то ли что-то где-то теряю при выходе из scope'а - хоя scope'а всего-то 2 - 2 метода-члена класса (внутри которых scope'ов вроде нет) и 1 вектор член того же класса... в который по кругу: дописываются элементы из 2-го метода + сам он обрабатывается 1-ым методом... надо ли здесь выделить динамически память для этого вектора-поля-члена класса?.. или проблема в другом?... - то ли с константностью нагрешила - но ведь начало вектора и конец (последняя загруженная во 2-й метод строка и вернувшийся довесок к вектору-члену класса) обрабатываются нормально... просто интересно... гадать не надо, код не просите - но разобраться интересно - если кто знает... хотя с тормозами (sleep(5)) в момент обращения к серверу (до или после) работает всё... пока совсем не "access denied" (наверно, там сервер сам уже динамически решает, когда его уже достало количество клиентов и их запросы, - вот и получается "повезёт-не повезёт" успеть до "access denied" - но это детали - это и так понятно)... сервер тоже не просите - не мой... Добавлено через 5 часов 27 минут
0
|
|||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 17.01.2021, 09:03 [ТС] | ||
|
0
|
||
| 17.01.2021, 09:03 | |
|
Подскажите пожалуйста, правильно выделять память под lua состояние
Можно ли, используя make_shared<T> выделять память под массивы, по аналогии с функцией make_unique<T>?
Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|