Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Экономия RAM.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Страницы: 1, 2
adnega
Цитата(zltigo @ Mar 10 2016, 10:46) *
Но упаковался и еще осталость чуток.

Видимо, для эффективной экономии ОЗУ нужно не только знать размеры переменных, но и знать архитектуру своего ПО.
Хотя сейчас напрягаться не принято и проще поставить внешнюю SDRAM и/или выбрать МК с большим количеством набортного ОЗУ.
В приложениях с таким функционалом, что приходится использовать TCP/IP, обсуждение размера переменной (1 или 4 байта)
вызывает у меня определенные подозрения (что что-то не так).
zombi
Цитата(zltigo @ Mar 10 2016, 11:21) *
Один их эффективых путей экономии это многократное и повторное использование ресурсов.

Америку открыли biggrin.gif
Главное обеспечить невозможность одновременного выполнения процессов использующих эту общую область.
Цитата(zltigo @ Mar 10 2016, 11:21) *
Для этого можно использовать менеджеры памяти

И если такой возможности нет то и никакой мыныджер не поможет.
adnega
Цитата(zombi @ Mar 10 2016, 11:01) *
Америку открыли biggrin.gif
Главное обеспечить невозможность одновременного выполнения процессов использующих эту общую область.

Вроде, все не так.
Никакой блокировки процессов нет. Процесс просит память, менеджер может выделить память или отказать в выделении.
С выделенной памятью процесс может делать все что угодно, и другие процессы тут вообще никакой роли не играют.
Отказ в выделении памяти процессу нужно как-то обработать.
Цитата(zombi @ Mar 10 2016, 11:01) *
И если такой возможности нет то и никакой мыныджер не поможет.

Обсуждается ситуация, когда такая возможность есть.
Может, вам стоит побольше вдумчивее читать и поменьше язвительно писать?
zombi
Цитата(adnega @ Mar 10 2016, 11:19) *
Обсуждается ситуация, когда такая возможность есть.

Это Вы сами так решили или подсказал кто?
Цитата(adnega @ Mar 10 2016, 11:19) *
Может, вам стоит побольше вдумчивее читать и поменьше язвительно писать?

Может.
adnega
Цитата(zombi @ Mar 10 2016, 12:15) *
Это Вы сами так решили или подсказал кто?

ТС в сообщении 15.
zltigo
QUOTE (adnega @ Mar 10 2016, 10:19) *
Обсуждается ситуация, когда такая возможность есть.

Навязываемое Вами "обсуждение", откуда взять память, которой нет, абсолютно бессмысленно. Посему речь идет о памяти, котороая есть и которую надо пытаться использовать в разные моменты времени для разных целей. Если такой возможности нет, что практически НЕВЕРОЯТНО, или лениво думать как такое обеспечить, то и разговоров нет. Только Ваш треп ни о чем.



QUOTE (adnega @ Mar 10 2016, 09:58) *
Видимо, для эффективной экономии ОЗУ нужно не только знать размеры переменных, но и знать архитектуру своего ПО.

Для вытягивания последних байтов надо знать уже все sm.gif. Но это уже на самом деле большая редкость. Я вот тоже на в работе о которой писал, тоже уже для M8C контроллера последние байты вытягивал, вытянул, плюнул, переделал принципиально, и стало 64 свободных байта. Ну придет серверу отказ на исполнение одной редкой команды, если звезды не так лягут, ну переспросит.
QUOTE
В приложениях с таким функционалом, что приходится использовать TCP/IP, обсуждение размера переменной (1 или 4 байта)
вызывает у меня определенные подозрения (что что-то не так).

Одиночной переменной - несомненно, но бывают и солидные массивы данных, где уже счет идет на тысячи таких переменных за каждым из тысяч процессов.
При этом слово тысячи не должно особо пугать - на одном из проектов еще на i8085 у меня в свое время было 256 процессов. На первом из опробованных ARM LPC2114 - 1280 процессов. В обоих случаях прикол был в том, что процессы находились в разных состояниях и в статических состояниях обходились достаточно небольшим количеством данных. На переходных режимах процессам добавлялся блок памяти для обслуживания "развития" процесса.
Kabdim
Цитата(Jenya7 @ Mar 9 2016, 10:27) *
а я могу создать новый объект и положить его по адресу который я указал?

Можно, называется размещающий конструктор. Но подумайте дважды т.к. кол-во потенциальных граблей увеличится в геометрической прогрессии.
zombi
Цитата(zltigo @ Mar 10 2016, 14:17) *
Только Ваш треп ни о чем.

Интересно помог ли ТС ваш трёп память освободить?
zltigo
QUOTE (zombi @ Mar 10 2016, 23:37) *
Интересно помог ли ТС ваш трёп память освободить?

Поживем-увидим. Но то, что я точно знаю, что Вам уже ничего не поможет sad.gif.

zombi
Цитата(zltigo @ Mar 11 2016, 01:41) *
Но то, что я точно знаю, что Вам уже ничего не поможет sad.gif.

Я в помощи не нуждаюсь , а уж в помощи такого хвастуна-виртуоза как вы и подавно.
sigmaN
bb-offtopic.gif
Хахаха у zombi бомбануло прям так не слабо по ходу))))))))))
Не знаю, вроде zltigo дельные вещи говорил...
Jenya7
Цитата(zombi @ Mar 11 2016, 02:37) *
Интересно помог ли ТС ваш трёп память освободить?

помог. вывод такой. взять камень с бОльшим RAM. дешевле чем внешнюю память ставить.
ViKo
В однозадачном режиме использовать кучу безопасно. Выделил фрагмент, попользовался, освободил. Сложнее, когда задач несколько, и каждая может попросить памяти. Как определить худший случай, когда требуется максимальный объем?
zombi
Цитата(Jenya7 @ Mar 13 2016, 14:25) *
помог. вывод такой. взять камень с бОльшим RAM. дешевле чем внешнюю память ставить.

Т.е. совет использовать менеджер памяти подтолкнул Вас к решению "взять камень с бОльшим RAM"?
Феерично!
Или это сарказм такой?
adnega
Цитата(zombi @ Mar 13 2016, 14:22) *
Т.е. совет использовать менеджер памяти подтолкнул Вас к решению "взять камень с бОльшим RAM"?

Почитайте сообщение №51.
zombi
Цитата(adnega @ Mar 13 2016, 14:31) *
Почитайте сообщение №51.

Не имею возражений к Вашему сообщению №51

И мне кажется что ТС сам же и ответил на свой вопрос написав:
Цитата(Jenya7 @ Mar 8 2016, 10:38) *
...закончился RAM. а я еще даже не начал писать.

Т.е. на этапе проектирования количество необходимой памяти не определено даже приблизительно.
О каких менеджерах вообще может идти речь? biggrin.gif
adnega
Цитата(zombi @ Mar 13 2016, 14:54) *
Т.е. на этапе проектирования количество необходимой памяти не определено даже приблизительно.
О каких менеджерах вообще может идти речь? biggrin.gif

Мы с zltigo привели реальные примеры, когда пересмотр архитектуры позволил "найти" нужное количество памяти.
Если ТС не способен ухитриться (или задача не позволяет), то для него путь - тупо увеличить объем ОЗУ.
Отрицать на вашем месте вообще подход с использованием менеджеров памяти - не профессионально.
Jenya7
Цитата(ViKo @ Mar 13 2016, 17:06) *
В однозадачном режиме использовать кучу безопасно. Выделил фрагмент, попользовался, освободил. Сложнее, когда задач несколько, и каждая может попросить памяти. Как определить худший случай, когда требуется максимальный объем?

тут нужно решать концептуально. есть 10 задач. либо загрузить их в RAM и проходить итерацией , либо брать по одной - загрузил-освободил - тогда можно и с malloc/free. но во втором случае возникает вопрос - где держать задачи.

хорошо. я написал код для PLC. В Ladder Diagram или мнемоник. где хранится пограмма которую PLC исполняет?

идея.положу во флеш..если останется место. он что то тоже стремительно убывает.
zombi
Цитата(adnega @ Mar 13 2016, 16:17) *
Отрицать на вашем месте вообще подход с использованием менеджеров памяти - не профессионально.

Обвинять кого либо в том чего он не говорил - не порядочно.
adnega
Цитата(zombi @ Mar 13 2016, 15:25) *
Обвинять кого либо в том чего он не говорил - не порядочно.

Значит менеджеры памяти в некоторых задачах нужны.
Пригодность задачи для использования динамического выделения памяти определяет разработчик.
Если задача непригодна (пусть даже по причине отсутствия опыта у исполнителя) - наращиваем ОЗУ.
Все - конфликт исчерпан. Я прошу меня простить, если с кем-то поступил не порядочно.
zombi
...
adnega
Тема исчерпана - неплохо бы закрыть и последнее почистить.
zombi
Цитата(adnega @ Mar 14 2016, 00:40) *
Тема исчерпана - неплохо бы закрыть и последнее почистить.

Ну значит так и есть biggrin.gif
Удалил, мне не сложно.
А насчёт "закрыть" это лучше к ТС писать

Цитата(adnega @ Mar 13 2016, 17:14) *
Значит менеджеры памяти в некоторых задачах нужны.

Может СИшникам и нужны, мне точно не нужны.
Для меня это просто часть алгоритма и как его обозвать не имеет значения.
ViKo
Создать глобальное объединение (union) из массивов всех нужных типов, максимально необходимого размера, и пользоваться им по мере необходимости вместо кучи. Годится?
Хочу понять, как куча может помочь сэкономить память? Если требуется хранить глобальные переменные, но никуда не денешься, придется выделить для них память сразу и навсегда. Если локальные, так они где создаются - в стеке или в куче? Кто (что) решает?

P.S. Или приведением указателя к нужному типу пользоваться массивом целых и в хвост и гриву.
jcxz
Цитата(ViKo @ Mar 14 2016, 10:48) *
Создать глобальное объединение (union) из массивов всех нужных типов, максимально необходимого размера, и пользоваться им по мере необходимости вместо кучи. Годится?
Хочу понять, как куча может помочь сэкономить память?

Никак. Может привести только к бОльшему расходу памяти.
Куча полезна только если нужно запускать различные задачи, заранее не известные (когда и какую), с заранее неизвестными требованиями к памяти. Но и то - нужна обработка случая нехватки памяти. Да и дефрагментация периодическая или после завершения каждой задачи. Это случай Linux-а и подобных ему систем.

Обычно для ембеддед достаточно:
union MemShare {
struct MemMode1 {
int member1, member2;
...
} memMode1;
struct MemMode2 {
int member1, member2;
...
} memMode2;
...
} memShare;
где Mode1, Mode2, ... - состояния работы устройства с неперекрывающимися структурами данных; которые в свою очередь могут быть union и делиться дальше.
zltigo
QUOTE (jcxz @ Mar 14 2016, 10:24) *
Никак. Может привести только к бОльшему расходу памяти.
Куча полезна только если нужно запускать различные задачи, заранее не известные (когда и какую), с заранее неизвестными требованиями к памяти.

Разумеется нет. Куча, это просто ОДИН ИЗ СТАНДАРТИЗИРОВАННЫХ механизмов расшаривания памяти. Само расшаривание памяти может использоваться для чего угодно, а отнюдь не только для "запуска задач с неизвестными требованиями".
jcxz
Цитата(zltigo @ Mar 14 2016, 15:32) *
Разумеется нет. Куча, это просто ОДИН ИЗ СТАНДАРТИЗИРОВАННЫХ механизмов расшаривания памяти. Само расшаривание памяти может использоваться для чего угодно, а отнюдь не только для "запуска задач с неизвестными требованиями".

Прочитайте внимательнее. И уловите разницу между полезно и может. Никто не спорит, что куча может использоваться для чего угодно, ход код переносимый оттуда выполняйте.
zltigo
QUOTE (jcxz @ Mar 14 2016, 16:00) *
Прочитайте внимательнее. И уловите разницу между полезно и может. Никто не спорит, что куча может использоваться для чего угодно, ход код переносимый оттуда выполняйте.

Я прекраcно улавливаю разницу между "полезно" и "полезно ТОЛЬКО". Вот про использования Вами "полезна ТОЛЬКО если нужно запускать различные задачи", "Может привести ТОЛЬКО к бОльшему расходу памяти" и отвечал. Так что либо уберите слово ТОЛЬКО из своих постов, либо не пытайтесь сейчас юлить.
zombi
ТС вопрошает
Цитата(Jenya7 @ Mar 8 2016, 11:38) *
закончился RAM. а я еще даже не начал писать.

"вЫртуоз" пишет:
Цитата(zltigo @ Mar 9 2016, 00:33) *
менеджер может быть даже узкоспециализированый под уникальные объекты. Тут ведь дело в использовании самого принципа динамического использования памяти.

Цитата(zltigo @ Mar 9 2016, 21:17) *
Что то дикие у Вас представления о менеджерах памяти и программировании

Просто прохожий -
Цитата(zombi @ Mar 10 2016, 03:14) *
Ну так рассказали бы дикарям про менеджеры памяти

"вЫртуоз"-
Цитата(zltigo @ Mar 9 2016, 21:17) *
- этим менеджер заниматеся - Вам то зачем что то знать?

и тд и тп
Цитата(zltigo @ Mar 14 2016, 18:57) *
"полезно" и "полезно ТОЛЬКО"."полезна ТОЛЬКО если нужно


Внимание, ВОПРОС!!!
Помог ли "вЫртуоз" освободить память вопрошающему?

И если помог, то представляю как сейчас TC "купается" в огромном количестве свободной памяти которая так и просит его - ну возьми ну используй меня...
zltigo
QUOTE (zombi @ Mar 15 2016, 00:38) *
Внимание, ВОПРОС!!!

Будьте внимательнее. Ответ уже был http://electronix.ru/forum/index.php?showt...t&p=1410271
Мне описанный мной подход к делу помогает. По причине того, то я понимаю, что и как делаю. Вам, по причине полной неспособности понять, соответственно - нет.
sigmaN
Цитата
А помогли ли ТС ваши советы?
И где конкретно советы? один сплошной трёп!

Да ладно? Нормально тема раскрыта.
Или вы хотели чтоб тут за ТС прям все исправили и отладили?
Направление для изучения дано, варианты расшарить память между задачам/подсистемами/etc даны.
Техники от полу-кустарных, ручных вариантов с union до более правильных менеджеров памяти в общих чертах описаны....
Дальше человек уже должен маленько по гуглить и найти всё что ему нужно.

Тут как-бы получается умному достаточно, а дурак все равно не поймет.

P.S.
Честно не понимаю чего у нескольких людей на форуме так бомбит пукан от советов zltigo?
Это такой способ отомстить за курс Евро или что?
Потому что это уже явно какая-то не адекватная реакция часто начинается.. Объяснения приходят только в стиле теории заговоров или борьбы с империализмом и ненависти к буржуазии )))

Но убирает он вас всех здорово! Порой тему читаю только чтоб по улыбаться со всего этого ))))
adnega
Цитата(zombi @ Mar 18 2016, 03:16) *
Вы либо курите что-то запрещённое , либо zltigo Ваш работодатедь как и для adnega?

Скоро вы всех СИ-шников припишете к наемникам zltigo...
Есть профи, которые на жизнь электроникой зарабатывают (и при этом любят электронику).
Им виднее, что и как надо делать, а что и как не надо делать - поэтому они готовы давать советы
для решения конкретной задачи в конкретных условиях.
А есть любители, которые считают только свой подход правильным в любых условиях.
Вроде, вопрос топика закрыли несколько страниц назад. Хочется поговорить о бесполезности СИ,
о ненужности абстракций программирования и о "любимом" ASM? - открывайте свою тему.
Да, zltigo довольно прямолинеен, но по информации из его постов можно судить о таком опыте
(в том числе и asm-разработок) и таком объеме созданного полезного, до которого вам еще очень далеко.
Завязываете: а то очень басню о Моське и Слоне напоминает.
zombi
Прямолинеен biggrin.gif biggrin.gif biggrin.gif
ar__systems
Неужели наконец-то всю память сэкономили?
Jenya7
Цитата(ar__systems @ Mar 23 2016, 09:41) *
Неужели наконец-то всю память сэкономили?

либо ставить камень пожирнее, либо добавлять внешнюю память. все остальное...дискуссионные варианты как вы наверняка успели заметить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.