J'ai un appel à calloc
pour 1 élément d'un peu plus de 1 gigaoctet. Cet appel renvoie NULL
et la vérification d'errno indique une erreur de mémoire insuffisante. Cependant, lors des tests, j'ai presque 4 Go de RAM libre, sans parler de la mémoire virtuelle disponible. Après la recherche du problème, la seule chose que je peux trouver pour pourquoi calloc
échoue est que je n'ai pas assez de mémoire contiguë disponible. Cependant, il me semble que si j'ai 4Gb de mémoire disponible, il devrait être assez facile d'avoir ~ = 1Gb de mémoire contiguë. Existe-t-il un moyen de vérifier la disponibilité de la mémoire contiguë? Si c'est le problème, existe-t-il un moyen simple de "défragmenter" la mémoire?Pourquoi calloc ne parvient pas à allouer 1 Go sur un système avec 4 Go de RAM?
Ou cela a-t-il quelque chose à voir avec la taille de bloc de la mémoire allouée, de sorte qu'elle essaye réellement d'allouer beaucoup plus de mémoire que je n'ai disponible? Quelles sont mes options pour déterminer la cause de l'échec? Quelles sont mes options pour allouer avec succès autant de mémoire?
Je suis sur un système Windows natif avec 12 Go de mémoire. Ensuite, je vais essayer d'exécuter dans une machine virtuelle et de donner à la machine virtuelle plusieurs gigaoctets de mémoire, et de vérifier si la machine virtuelle peut accéder de manière non transparente à suffisamment de mémoire contiguë. Je publierai les résultats ici si je complète cela aujourd'hui.
Votre fenêtre est de 32 bits, non? –
Vous devez lire ceci: http://blogs.msdn.com/b/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx. Vous n'avez plus d'espace d'adressage *, ce qui n'a rien à voir avec la RAM. –
@Nya Windows 64 bits (bien que la plate-forme cible pourrait être 32). – taz