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