|
|
  |
Динамическое создание массивов и ошибки при работе с ними, Косяк, но не понимаю почему |
|
|
|
Jun 7 2009, 20:50
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ Jun 7 2009, 23:20)  Забудьте как страшный сон попытки использовать динамическое распределение памяти на таких контроллерах, Не стоит только этот один козий библиотечный malloc и встроенный heap ассоциировать со всем многообразием "динамического распределения" памяти. Пусть есть некий пул состоящий из 5-ти буферов, объявленный статически: TBUFFER pool[5]; Если подумать, то можно без накладных расходов по скорости и без всяких проблем с фрагментацией брать из этого массива свободный буфер, поработав - возвращаеть его на место. Это тоже будет __динамическое__ распределение памяти. надо только написать свои: TBUFFER *pool_alloc(); pool_free( TBUFFER *);
|
|
|
|
|
Jun 8 2009, 08:43
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(sergeeff @ Jun 8 2009, 09:03)  А heap на 20 байт - это полная и бессмысленная фигня. Вы прикиньте, сколько места сожрали программы для ее обслуживания. Кроме того, при использовании heap, у вас и озу было потрачено. При чём соотношение затрат к размеру кучи в % уже говорит в пользу отказа от такого подхода. Даже в учебных целях, размер кучи (собственно выбор камня) неудачен. В тоже время, это совершенно не значит, что для работы с динамической памятью нет места в однокристалках. Многие используют динамическую память. Есть кристаллы с 4/8/64к оперативки. Там это применимо. В одном случае я применял динамику в м88 (1к). Там, конечно, нет полной работы с кучей, а только выделение памяти и освобождение её всем куском, но всё-же.
|
|
|
|
|
Jun 9 2009, 05:54
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Под эффективностью я имел в виду не только скорость алгоритма но и то что под 5 байт не будет выделяться 100байт. Вообще-то эффективность менеджера памяти - понятие разностороннее. Например, у меня в последнее время хитрозадый менеджер сделан с точки зрения минимизации времени нахождения внутри критической секции. В двух словах - там кэш уже аллоцированных кусочков. Но, правда, это ведет к некоторому перерасходу по памяти. Зато критическая секция теперь представляет из себя просто запрещение прерываний на время удаления/добавления элемента в односвязный список, причем, в исключительно в начало. Типа такого: Код DISABLE_INTERRUPTS(); result=*top; *top=result->next; ENABLE_INTERRUPTS(); и Код DISABLE_INTERRUPTS(); chunk->next=*top; *top=chunk; ENABLE_INTERRUPTS(); А остальная обвязка выполняется в незаблокированном состоянии.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jun 9 2009, 13:30
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ Jun 8 2009, 21:38)  ... должна иметь эффективный алгоритм отведения/освобождения памяти для элементов РАЗНОГО размера. Я бы не стал перефразировать и конкретизировать. Динамическое распределение, как было сказано, - это возможность захватить и освободить ресурс - alloc/free. Размеры это уже дело десятое. Цитата(singlskv @ Jun 8 2009, 22:15)  Под эффективностью я имел в виду не только скорость алгоритма но и то что под 5 байт не будет выделяться 100байт. Такой "обобщенный" параметр сводящийся к общей эффективности решения. Если знаете что там всегда 5 байт, то выделите себе 5 байт статически. А если не знаете сколько, то чем не устраивает брать по 100?
|
|
|
|
|
Jun 11 2009, 16:47
|
Местный
  
Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512

|
мда, как говориться - начали за здравие и заканчиваем - за упокой. Не надо на меня наговаривать что мол "гоню по чём зря" - как всегда народ тут отвечает общими фразами не предлагая никаких конкретных мыслей. Причем сопровождая "пальцевращением" Поскольку malloc() аппаратно контроллером не поддерживается то создам статический буфер т.к. его размер и когда/кем будет использован знаю. Вопрос на счет "материализовался": почему когда создается куча то память отбирается у области ОЗУ где Hardware Stack а не, скажем, у Data Stack ? Почему так?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|