Zwykle nie mam problemu z podjęciem decyzji, czy niektóre dane muszą być globalne, statyczne czy na stosie (tutaj nie ma alokacji dynamicznej, więc nie ma zastosowania sterty). Przeczytałem również kilka pytań / odpowiedzi, takich jak to, ale moje pytanie jest bardziej szczegółowe, ponieważ wymaga ogromnej ilości danych, ogromnych w porównaniu do pamięci systemowej.
Pracuję nad istniejącym kodem, który próbuję ulepszyć (projekt, możliwe problemy, wydajność itp.). Ten kod działa na starym 8-bitowym MCU z tylko 4KB pamięci RAM . W tym kodzie mam do czynienia z tablicą o wielkości prawie 1 KB (tak, 1 KB w systemie RAM 4KB ). Używany jest każdy bajt tej tablicy, to nie jest pytanie. Problem polega na tym, że tablica ta jest statyczną tablicą w pliku, w którym została zadeklarowana, więc jej cykl życia jest taki sam jak w programie (tzn. Można ją uznać za nieskończoną).
Jednak po przeczytaniu kodu właśnie dowiedziałem się, że ta tablica nie potrzebuje nieskończonego cyklu życia, jest zbudowana i obsługiwana w sposób w pełni proceduralny, więc powinniśmy być w stanie zadeklarować ją tylko w funkcji, w której jest używana, w ten sposób byłby na stosie, a zatem zapisalibyśmy ten 1KB pamięci RAM.
Teraz pytanie: czy to byłby dobry pomysł? Z punktu widzenia projektu, jeśli nie potrzebuje nieskończonego / globalnego cyklu życia, należy do stosu. Ale hej, to 1KB na 4KB, czy nie ma żadnej wady przydzielania 25% pamięci RAM w ten sposób? (może to być 50% lub więcej stosu)
Czy ktoś może podzielić się doświadczeniem z tego rodzaju sytuacją, czy może ktoś pomyśli o jakimkolwiek ważnym celu, aby nie umieszczać tej tablicy na stosie? Szukam wad technicznych, a także komentarzy do projektu.
Jedyne, co mam świadomość, to to, że muszę upewnić się, że faktycznie mam 1 KB wolnego stosu, wchodząc w tę funkcję. Może to wszystko, co muszę zrobić, może nie.