2010-07-25 19 views
3

Est-il possible qu'un seul processus exécutant une version compilée 32 bits de python dans Snow Leopard (machine 64 bits) semble consommer> 4gb (disons 5.4gb) de mémoire virtuelle comme vu par la commande supérieure?Un processus exécutant un binaire compilé 32 bits peut-il utiliser plus de 4 Go de mémoire?

J'ai fait un file ...python pour voir que le binaire n'était pas x86, mais il semblait consommer plus de 5 Go de mémoire. Je suppose que les bibliothèques qui ont été utilisées (RPy) étaient des blocs de données «mmap», et que le cache en mémoire apparaissait sous l'empreinte mémoire de mon processus.

Ou peut-être que je n'ai pas vérifié que les binaires Python étaient 32 bits. Ou peut-être y a-t-il un mélange de 32 bits/64 bits (libffi?).

Totalement confus.

+0

"pour voir que le binaire n'était pas x86" - alors c'était quoi? x86 == 32bit, x64 = 64 bits. –

+0

@Henk: En fait, la plupart des processeurs de consommateurs en ce moment sont x86_64 - cpus qui supporte 64bit * seulement * et ne supporte pas 32bit (ie, x64) sont assez rares – Daenyth

+0

@Daen, je parlais de fichiers binaires, et le plus commun dénomination d'entre eux. –

Répondre

2

Non, c'est physiquement impossible. Cela n'empêche pas le système d'exploitation d'assigner plus qu'il ne peut utiliser en raison de l'alignement et de la fragmentation, disons, il pourrait avoir une page entière et ne pas cartographier tout cela. Cependant, il est impossible d'utiliser plus de 4 Go pour n'importe quel processus, et probablement beaucoup moins que pour l'espace noyau.

+0

La limite est la plupart du temps un peu plus de 3 Go et l'auteur du programme doit spécifiquement demander la possibilité d'utiliser autant de mémoire (la limite par défaut est de 2 Go). Cela s'applique à Windows, ne sais pas à propos de Linux. – PeterK

+0

@peterK: La limite exacte n'est pas importante. Ce qui est important, c'est que c'est très au sud de 5,4 Go. – Puppy

+0

Je sais, je voulais juste ajouter plus d'informations. – PeterK

0

Il est possible si les processus est en utilisant une sorte de pointeurs fous long/loin/étendues et des données cartographiques dans et outof un espace d'adressage 32 bits comme il en a besoin, mais à ce moment-là, il peut difficilement être qualifié 32 -bit quand même. (Python fait certainement pas faire cela, donc la réponse @ DeadMG est presque certainement ce qui se passe réellement.)

+0

Premiere CS4 utilise une autre approche, qui charge un autre processus pour chaque 4 Go de mémoire, de sorte que l'ensemble du programme peut accéder autant que la mémoire physique existante –

+0

@ LưuVĩnhPhúc, si vous avez fait que vous auriez un processus avec 2.6gb et un autre avec 2.8gb (ou quelque chose le long de ces lignes), pas un processus avec 5.4gb. (C'est un bon moyen de traiter les contraintes d'espace d'adressage, mais ce n'est pas vraiment applicable ici.) –

+0

bien sûr, c'est 2 (ou plus) processus séparés mais ils utilisent une interconnexion de processus pour transférer la date entre eux. Quoi qu'il en soit, Premiere cs5 et au-dessus abandonnent la prise en charge de l'environnement 32 bits –