2015-12-22 14 views
6

Pracuję z systemem wbudowanym. Aplikacja działa w AT91SAMxxxx i cortex m3 lpc17xxx. Zajmuję się dynamicznym przydzielaniem pamięci, ponieważ radykalnie zmieniłoby to oblicze aplikacji (i dałoby mi więcej mocy).malloc w systemach wbudowanych

Myślę, że moją jedyną prawdziwą drogą jest wyznaczenie obszaru pamięci dla sterty i zaprojektowanie dopasowanego malloc, który najlepiej pasuje (kalambur) do mojego celu.

Patrząc na różne algorytmy przydzielania pamięci, nie można natknąć się na malloc Douga Lea. Rozumiem, że zostało to wykorzystane w systemach wbudowanych, takich jak mój, gdzie nie ma systemu operacyjnego i dostosowanych wersji, powiedzmy, że funkcja sbrk() została dostarczona, aby to osiągnąć. Próbuję znaleźć dobre przykłady tego, co osiągnięto, by móc wypróbować dowód koncepcji, zanim wskoczę do pisania własnego.

Czy można używać dlmalloc w systemie takim jak mój?

Jeśli tak, czy ktoś może wskazać mi odpowiedni zasób? (nie znalazłem wielu, którzy mi pomogli)

Czy lepiej jest napisać własną malloc, która jest dostosowana do moich potrzeb?

Przeprosiny za większość moich dotychczasowych badań polegały na projektowaniu malloc nie używając douga, co jest innym wyzwaniem. Domyślam się, że próbuję się dowiedzieć, patrzy na tę trasę bardziej szczegółowo niż strata czasu.

Edit:

Morał z tej historii: patrząc na dlmalloc w moim przypadku sensu.

+0

Czy naprawdę potrzebujesz dynamicznego przydzielania pamięci w aplikacji wbudowanej? –

+2

Jakie są rzeczywiste cechy alokacji, które należy obsłużyć? Bardziej konkretnie, być może, znajdziemy bardziej idealne rozwiązanie. –

+2

To zależy w dużej mierze od charakteru przydziałów. W wielu przypadkach wystarczy dynamicznie przydzielać bloki o ustalonym rozmiarze. Byłoby to o wiele łatwiejsze do wdrożenia niż ogólna metoda alokacji (która miałaby znacznie więcej narzutów w zakresie czasu i memu, konieczność łączenia wolnych bloków itp.). – Ctx

Odpowiedz

5

Dla twojej sytuacji, twoja własna implementacja malloc lub dlmalloc jest na pewno możliwa, ale nie jest wskazana.

Na systemach wbudowanych o bardzo niskim poziomie, MCU nagich metalowych itp. Używanie malloc jest bezcelowe.

Będziesz obsługiwał swoją aplikację i tylko na nich swoją aplikację, wiesz, ile masz pamięci i możesz z niej korzystać, i jesteś w stanie w pełni dostosować program do swoich potrzeb. Z malloc oszczędzasz pamięć, ale to nie ma sensu. Jeśli twój program przy maksymalnym wykorzystaniu pamięci nie przekracza pamięci dostępnej na urządzeniu, a twój program jest jedynym uruchomionym, nie ma powodu, aby używać malloc i nie ma powodu, aby pamięć nie była używana.

tl; dr Możliwe, ale niezwykle bezcelowe.

+0

Masz na myśli dlmalloc lub dynamiczną alokację pamięci we wszystkich formach? i mogę edytować moje pytanie, aby dodać więcej szczegółów do mojej aplikacji, ale przydzielanie pamięci w czasie wykonywania nie jest w moim przypadku bezwartościowe. –

+0

Przykro mi, że wyraziłem moje własne zlekceważenie powyższego komentarza –