|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
Когда выделять память08.10.2020, 18:18. Показов 16323. Ответов 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 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
||||
| 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? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|