Saya biasanya tidak punya masalah memutuskan apakah beberapa data harus bersifat global, statis atau di stack (Tidak ada alokasi dinamis di sini, jadi tidak ada gunanya tumpukan). Saya juga telah membaca beberapa T / A seperti ini tetapi pertanyaan saya lebih spesifik karena melibatkan sejumlah besar data, sangat besar dibandingkan dengan memori sistem.
Saya sedang mengerjakan kode yang sudah ada yang saya coba tingkatkan (desain, kemungkinan masalah, kinerja, dll.). Kode ini berjalan pada MCU 8bit lama dengan hanya 4KB RAM . Dalam kode ini saya menghadapi penggunaan array hampir 1KB (ya, 1KB pada sistem RAM 4KB ). Setiap byte array ini digunakan, bukan itu pertanyaannya. Masalahnya adalah array ini adalah array statis dalam file yang dideklarasikan, sehingga siklus hidupnya sama dengan program (yaitu dapat dianggap tak terbatas).
Namun, setelah membaca kode, saya baru tahu bahwa array ini tidak memerlukan siklus hidup yang tak terbatas, itu dibangun dan ditangani dengan cara yang sepenuhnya prosedural, jadi kita harus dapat mendeklarasikannya hanya dalam fungsi di mana ia digunakan, dengan cara ini akan berada di stack, dan karena itu kami akan menghemat 1KB RAM ini.
Sekarang pertanyaannya: Apakah ini ide yang bagus? Dari sudut pandang desain, jika tidak memerlukan siklus hidup tak terbatas / global, itu milik stack. Tapi hei, itu 1KB dari 4KB, tidak ada kekurangan mengalokasikan 25% dari RAM seperti ini? (itu mungkin 50% atau lebih dari tumpukan)
Bisakah seseorang berbagi pengalaman dengan situasi seperti ini, atau apakah seseorang memikirkan alasan yang sah untuk tidak meletakkan array ini di stack? Saya mencari kelemahan teknis serta komentar pada desain.
Satu-satunya hal yang saya sadari adalah saya harus memastikan bahwa saya benar-benar memiliki 1KB stack gratis ketika memasuki fungsi ini. Mungkin hanya itu yang harus saya selesaikan, mungkin tidak.