Mallocs grandes de 64 bits

¿Cuáles son las razones por las que un malloc () fallaría, especialmente en 64 bits?

Mi problema específico es tratar de maltratar una enorme porción de 10 GB de RAM en un sistema de 64 bits. La máquina tiene 12 GB de RAM y 32 GB de intercambio. Sí, el malloc es extremo, pero ¿por qué sería un problema? Esto está en Windows XP64 con compiladores Intel y MSFT. El malloc a veces tiene éxito, a veces no, alrededor del 50%. Los mallocs de 8GB siempre funcionan, los mallocs de 20GB siempre fallan. Si falla un malloc, las solicitudes repetidas no funcionarán, a menos que salga del proceso y comience un nuevo proceso nuevamente (que luego tendrá el 50% de posibilidades de éxito). No se están ejecutando otras aplicaciones grandes. Sucede incluso inmediatamente después de un nuevo reinicio.

e imagino que un malloc falla en 32 bits si ha utilizado los 32 (o 31) bits de espacio de direcciones disponibles, de modo que no haya un rango de direcciones lo suficientemente grande como para asignar a su solicitud.

También podría imaginar que Malloc falla si ha usado su RAM física su espacio de intercambio de disco duro. Este no es el caso para mí.

Pero, ¿por qué otra razón podría fallar un Malloc? No puedo pensar en otras razones.

Estoy más interesado en la pregunta general de malloc que en mi ejemplo específico, que probablemente reemplazaré con archivos mapeados de memoria de todos modos. El fallido malloc () es simplemente más un rompecabezas que cualquier otra cosa ... ese deseo de comprender sus herramientas y no sorprenderse por los fundamentos.

Respuestas a la pregunta(18)

Su respuesta a la pregunta