A memória é mais barata que o seu tempo, pelo menos nos primeiros sistemas produzidos. Encha o máximo de tudo que você puder no tabuleiro para o seu sistema protótipo e instrumentalize o heck fora do seu código. Você pode comprar placas menos bem povoadas para produção, mas agora você quer mega recursos.
- Aloque pilhas muito maiores do que você acha que precisará e preencha-as com um monte de texto repetido, como o nome do segmento que possui a pilha. Quanto disso será gravado, você mostrará quanto de pilha cada thread usou. Aplique um fator de segurança confortável a esse número para obter sua alocação final.
- Aloque muita pilha. Melhor ainda, em vez de usar o heap em tempo de execução, pré-aloque o heap no início para um (ou vários) conjuntos de memória de um (ou vários) tamanhos de bloco fixos. Alocar e desalocar somente daqueles em tempo de execução.
- Registre o uso de memória em um buffer grande (ou circular) ou registre a ID do solicitante em um preâmbulo distinto do espaço de dados real do bloco - qualquer coisa que deixe trilhas que você possa encontrar posteriormente para ajudar a analisar a demanda de memória, inanição de memória, ou falhas.
- Mantenha os buffers fora de suas pilhas, para que as ultrapassagens não levem a uma parada brusca ou, pior, causem grandes transferências de controle.
- Bata no sistema. Coloque em todos os cenários que você acha que vão estressar os requisitos de pilha e memória. Inscreva alguns usuários típicos e não típicos para fazer o mesmo. Alguns deles tentarão fazer coisas que você não previu. Incentive isso.
Quando você tiver feito tudo isso, terá um controle muito melhor dos requisitos de memória do que consegue obter agora.
(Editar; comentários não estão disponíveis para mim)
James:
'we would like to get rough estimate of the hardware and cost involved at this stage. Do you think this would be possible ?'
A resposta curta é sim, a RAM provavelmente é uma pequena parte do seu custo de hardware, então vá em frente e superestime - você ainda deve estar perto.
Como uma verificação aproximada, você pode obter uma estimativa grosseira para os requisitos de memória estática - código e dados estáticos - escrevendo e compilando algumas funções para obter uma razão aproximada entre linhas de origem e memória e extrapolando. Você precisará de uma contagem aproximada e algumas estimativas precisas sobre como seu design se expandirá em funções e linhas de código. Você pode fazer uma suposição sobre o uso de estruturas dinâmicas de seu projeto em tempo real - pilhas e pilhas ou piscinas? Eu provavelmente, pelo menos, dobraria ou quadruplicaria minhas estimativas.
Você pode implementar o sistema em um computador existente, funções de curto-circuito (compilando o código com um retorno curto em vez de # ifdef'ing out) que não fazem sentido nesse ambiente?
Se você realmente precisa estimar sem implementar muito, eu acho que você vai ficar extrapolando.