VS2005: limitar o tamanho Heap
-
01-07-2019 - |
Pergunta
É bandeira compilador a um VS2005 C ++ como a bandeira java Xmx ??? M para que eu possa limitar o tamanho da pilha do meu aplicativo em execução no Windows.
Eu preciso limitar o tamanho da pilha para que eu possa encher a memória para descobrir a memória livre atual. (O código também funciona em um sistema embarcado, onde este é o melhor método para obter o uso de memória)
Solução
Você pode querer olhar para saber se o utilitário gflags (no Windows Debugging Tools) pode fazer isso. Ele pode fazer um monte de outras coisas interessantes com a pilha de aplicativos nativos.
Outras dicas
Você pode definir o tamanho da pilha para o seu programa, definindo o tamanho em:
Linker -> System -> Heap Reserve Size
Ele também pode ser definido na linha de comando do compilador usando /HEAP:reserve
O tamanho da pilha depende do alocador usado. Também pode haver alguns chamam de API do Windows que limita a quantidade de memória que um processo pode alocar, mas eu não estou ciente de um e eu não me sinto como olhar para ele agora, desculpe. Mas, em geral, se você escrever seu próprio alocador (talvez apenas envolver o compilador fornecido malloc()
ou operador new
), você pode limitar artificialmente o tamanho da pilha dessa forma.
Como alternativa, se você tiver seu próprio alocador, mesmo que apenas um invólucro, você pode manter o controle de quanta memória foi alocado no total. Se você sabe a quantidade disponível, você pode simplesmente fazer alguma subtração e ser feito com a obtenção do total. Você também pode ser capaz de obter estatísticas de fragmentação, em seguida, como o maior bloco livre.