2015-12-22 7 views
6

Я работаю со встроенной системой. Приложение работает на AT91SAMxxxx и cortex m3 lpc17xxx. Я изучаю динамическое распределение памяти, так как это резко изменит лицо приложения (и даст мне больше мощности).malloc во встроенных системах

Я думаю, что мой единственный реальный маршрут состоит в том, чтобы выделить область памяти для кучи и спроектировать индивидуальный malloc, который лучше всего подходит (каламбур) моей цели.

Рассматривая различные алгоритмы распределения памяти, вы не можете наткнуться на malloc Doug Lea. Я полагаю, это было использовано во встроенных системах, таких как шахта, где нет ОС и адаптированных версий, например, функция sbrk() была предоставлена ​​для этого. Я пытаюсь найти хорошие примеры того, как это достигается, чтобы, возможно, попробовать доказательство концепции, прежде чем я начну писать свои собственные.

Можно ли использовать dlmalloc в такой системе, как мой?

Если да, то кто-нибудь может указать мне на соответствующий ресурс? (не найдено много, которые мне помогают)

Лучше ли идти и написать свой собственный malloc, который соответствует моим потребностям?

И извиниться, что большинство моих исследований до сих пор было посвящено разработке malloc, не использующего doug's, что является другой задачей. Угадай, что я пытаюсь выяснить, больше изучает этот маршрут, пустая трата времени.

Edit:

Мораль: глядя на dlmalloc в моем случае бессмысленно.

+0

Вам действительно нужно динамическое распределение памяти во встроенном приложении? –

+2

Каковы фактические характеристики распределений, которые необходимо поддерживать? Будучи более конкретным, возможно, вы/мы можем предложить более идеальное решение. –

+2

Это зависит от характера ваших распределений. Во многих случаях достаточно динамически выделять блоки фиксированного размера. Это было бы намного проще реализовать, чем общий метод распределения (который имел бы намного больше накладных расходов с точки зрения времени и memroy, необходимо объединить свободные блоки и т. Д.). – Ctx

ответ

5

Для вашей ситуации ваша собственная реализация malloc или dlmalloc определенно возможна, но не рекомендуется.

На очень низких уровнях встроенных систем, чистых металлических микроконтроллеров и т. Д., Использование malloc бессмысленно.

Вы будете запускать приложение и только свое приложение на них, вы знаете, сколько памяти у вас есть и можете использовать, и вы можете полностью адаптировать свою программу для удовлетворения таких потребностей. С malloc вы сохраняете память, но это бессмысленно. Если ваша программа с наивысшим объемом памяти не превышает объем памяти, доступной на устройстве, и ваша программа работает только одна, нет причин использовать malloc, и нет причин оставлять неиспользуемую память.

tl; dr Его возможно, но чрезвычайно бессмысленно.

+0

Вы имеете в виду dlmalloc или динамическое распределение памяти во всех формах? и я мог бы изменить свой вопрос, чтобы добавить в приложение больше специфических особенностей, но распределение памяти во время выполнения в определенном смысле не является бессмысленным. –

+0

жаль, что вы заявили мое собственное пренебрежение комментарием выше –

Смежные вопросы