malloc retorna NULL e define errno como ENOMEM, mas há bastante espaço de heap disponível?

Tenho uma situação em quemalloc() retornaNULL e conjuntoserrno paraENOMEM. Mas a pilha CRT (que é cultivável) tem bastante memória para trabalhar. Na hora demalloc, minha memória de processo é de cerca de 900 MB. O processo do host é um executável Java executado sob a Sun HotSpot JVM.

Omalloc() Estou fazendo é de 80 megabytes e falha. Se eu fizer uma alocação de 60 MB, ela será bem-sucedida. Depois disso, uma alocação de 50 MB, seguida por outra e outraalso success: claramente, ainda tenho muita memória, mas o malloc de 80 MB parece "grande" demais para digerir no sistema operaciona

Estou usando o Windows 7 x64 SP1 com 4 GB de RAM. Meu processo é um processo de 32 bits, criado com o VC ++ 2010 SP1. Estou usando o heap de baixa fragmentação, que é o padrão no Win 7 - também verifiquei com o HeapQueryInformation. O tempo de execução do VC2010 C que estou usando cria a pilha desta maneira:

HeapCreate(0, BYTES_PER_PAGE, 0)

De acordo com a documentação deHeapCreate, HeapAlloc chama automaticamenteVirtualAlloc para blocos maiores que 512 K

O que diabos pode causarmalloc() falhar se não houver falta de memória? Minha memória está muito fragmentada? Eu pensei que o Windows compactaria a pilha automaticamente. Isso é realmente estranho, nunca vi esse comportamento antes.

Outro computador com o Windows XP SP3 de 32 bits está exibindo o mesmo comportament

brigado, Martin

questionAnswers(0)

yourAnswerToTheQuestion