Pergunta

Eu estou escrevendo um aplicativo baseado em qt c ++ e eu preciso ser capaz de detectar a fragmentação de memória, a fim de verificar se o sistema atual pode realmente sustentar a carga de memória: a carga programa de uma imagem grande (15/21 megapixels são a norma) na memória e, em seguida, executar alguma filtragem sobre ele (w / escassa matrizes). Por exemplo, eu estou tendo problema de fragmentação de memória no Windows e VMMap tem sido muito útil para isso: o problema era algumas DLLs (Wacom tablet "wintab32.dll" eo app UltraMon) não se realocados assim que está dividindo o espaço de endereço no 0x10000000-0x30000000 VA do processo.

Eu quero fornecer o aplicativo com algum tipo de consciência para o problema de fragmentação e se perguntando se uma abordagem multi-plataforma (linux / mac / win32) dando as informações VMMap já dá existe.

Foi útil?

Solução

Resposta curta: Não há nenhuma maneira portátil.

resposta mais longa: Como a pilha é implementada e como ele funciona é um detalhe de implementação de sua implementação que amplamente difere entre as plataformas, std bibliotecas e sistemas operacionais. Você terá que criar uma versão diferente para cada aplicação - desde que, a implementação lhe dá uma API para ligar para ele. (Que Eu acho deve ser o caso para as três plataformas que você alvo.)

Outras dicas

Eu acho que você é excessivamente pessimista. 21 MP, mesmo admitindo um colorDepth de 16 bits e uma alphachannel igual em tamanho que levar apenas 168 MB. O espaço de endereço disponível em um sistema de 32 bits é medido em gigabytes.

Será que isso não o que você precisa?

bool is_contiguous_freestore_available(size_t max)
{
   char* tst = new(std::nothrow) char[max];
   if (tst == null)
      return false;

   delete[] tst;
   return true;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top