42 votes

Pouvez-vous allouer un très gros bloc de mémoire (> 4 Go) en c ou en c ++?

Avec de très grandes quantités de RAM ces jours-ci, je me demandais, est-il possible d'allouer un seul bloc de mémoire de plus de 4 Go? Ou aurais-je besoin d'allouer un tas de morceaux plus petits et de gérer la commutation entre eux?

Pourquoi??? Je travaille sur le traitement de certaines données XML openstreetmap et ces fichiers sont énormes. Je suis en train de les diffuser car je ne peux pas tous les charger en un seul morceau, mais je suis simplement curieux de connaître les limites maximales de malloc ou de nouveau.

26voto

Benoit Points 12985

Réponse courte: Non susceptibles

Pour que cela fonctionne, il serait absolument avoir à utiliser un processeur de 64 bits. D'autre part, elle dépend du Système d'Exploitation de soutien pour l'attribution de plus de 4G de RAM à un seul processus.

En théorie, il serait possible, mais vous devez lire la documentation pour l'allocateur de mémoire. Vous pourriez également être plus sensibles aux problèmes de fragmentation de mémoire.

Il y a de bonnes informations sur Windows de gestion de la mémoire.

24voto

Une couche d'Apprêt sur physcal et de la mémoire virtuelle mises en page

Vous auriez besoin d'un PROCESSEUR 64 bits et O/S de construction et presque certainement assez de mémoire pour éviter la raclée de votre travail. Un peu de contexte:

Un ordinateur 32 bits (en gros), des registres qui permet de stocker 2^32 (4,294,967,296) des valeurs uniques. Cela signifie qu'un pointeur 32 bits peuvent adresser toute une de 2^32 unique emplacements de mémoire, qui est l'endroit où la magie limite de 4 go vient de.

Certains systèmes 32 bit comme le SPARCV8 ou Xeon ont MMU est que de tirer un truc pour permettre davantage de mémoire physique. Cela permet à plusieurs processus de la mémoire pour un total de plus de 4GO dans l'ensemble, mais chaque processus est limitée à ses propres 32 bits de l'espace d'adressage virtuel. Pour un seul processus à la recherche à un espace d'adressage virtuel, seulement 2^32 emplacements physiques distincts peuvent être mappés par un pointeur de 32 bits.

Je n'entrerai pas dans les détails mais Cette présentation (attention: powerpoint) décrit la façon dont cela fonctionne. Certains systèmes d'exploitation ont des installations (telles que celles décrites Ici - grâce à FP ci-dessus) pour manipuler la MMU et de swap de différents emplacements physiques dans l'espace d'adressage virtuel en vertu de l'utilisateur le contrôle de niveau.

Le système d'exploitation et mémoire mapped I/O reprend certains de l'espace d'adressage virtuel, donc pas tout de que 4 GO est nécessairement disponibles pour le processus. Comme un exemple, Windows par défaut à la prise de 2 GO, mais peut être réglé pour ne prendre 1 GO si l' /3G commutateur est appelée au démarrage. Cela signifie qu'un seul processus, sur une architecture 32 bits de ce genre n'est possible de construire une ligne de structure des données un peu moins de 4 go de mémoire.

Cela signifie que vous auriez à utiliser explicitement le PAE installations sur Windows ou un établissement Équivalent sur Linux manuellement swap dans les superpositions. Ce n'est pas nécessairement difficile, mais il faudra un certain temps pour se mettre au travail.

Sinon, vous pouvez obtenir une version 64 bits de zone avec beaucoup de mémoire, et ces problèmes plus ou moins s'en aller. Une architecture en 64 bit 64 bits pointeurs de construire une ligne de structure de données avec un maximum de 2^64 (18,446,744,073,709,551,616) d'adresses uniques, au moins en théorie. Cela permet de plus grandes contigus des structures de données pour être construit et géré. Si l'obtention d'un matériel 64 bits est une option (et il peut être fait relativement pas cher si vous savez où chercher), alors vous pourriez trouver de l'obtention d'une version 64 bits de zone à être moins cher que de construire le gestionnaire de superposition.

Comment acheter une machine 64 bits avec beaucoup de mémoire sur le bon marché

Plusieurs largement disponibles architectures telles que SPARC, Opteron, différentes saveurs de la PUISSANCE et de la plus récente Xeons sont nativement capable de fonctionner en mode 64 bits. Windows est un peu à la traîne - XP 64 bits n'a jamais vraiment été un succès, mais le succès de Windows 7, Vista ou Windows server 2008 (Voir Ce Lien pour une description détaillée de traité sur l'utilisation de Windows server 2008 en tant que poste de travail O/S) ne viennent en 64 bits saveurs. Linux, Mac OS x et Solaris ont aussi mature de soutien pour les plates-formes 64 bits - je suis en train d'écrire cela sur un Opteron zone de course FC7 X64.

Si vous voulez acheter un ordinateur 64 bits sur le bon marché, Ebay est ton ami. Opteron ou Xeon postes de travail tels que le HP XW9300, SPARC basées sur des systèmes comme le Sun Blade 2500 ou PPC64 basée sur les Powermac peuvent être achetés sur Ebay pour des prix modestes - en particulier par rapport à leur prix de liste lorsque de nouvelles. Deux socket machines prennent généralement enregistré de mémoire, cela peut souvent être étendu à la même sorte de capacité de la mémoire en tant que serveur.

2-16 go de mémoire kits peuvent également être obtenus à grands rabais sur le commerce de détail d'Ebay, vous permettant de vous spec une machine avec des dizaines de giga-octets de mémoire (plus de 100 GO dans certains cas) pour un prix tout à fait raisonnable. Obtenir un beau rapide de disque ou deux pendant que vous y êtes. Faites vos devoirs et assurez-vous que vous obtenez le bon type de mémoire de votre machine; il y a plusieurs différents types de mémoire.

Remarque: assurez-vous que votre appareil prend en mémoire standard de Sun Blade 1000 et 2000 systèmes ne sont pas.

C'est un peu plus que juste pontification. Il y a 18 mois j'ai eu l'occasion d'acheter quelques XW9300 quand je travaillais avec Analysis Services 2005. Ce aime vraiment une version 64 bits de zone de la mémoire de configuration pour un serveur de production est de 6-8 GO - et j'ai eu du mal avec le cube construit à cours de mémoire. J'ai été par le biais de l'exercice de quelques faux départs (Intellistation Un Pro qui n'étaient pas fiables au point d'en être presque inutilisable) et une quantité non négligeable de l'argent gaspillé. Le XW9300 est je l'ai eu en fin de compte sont grands. Ils ont mis en place avec mon jambon de la poigne de l'installation du matériel, tout à fait un peu de poussière et quelques-uns assez grossière manipulation pendant le transport.

L'achat de ce genre de kit de nouveau, c'est l'œil-wateringly cher, mais la plupart des gens qui l'achètent sont les types de médias qui veulent la dernière et la plus grande CPU ou de personnes en cours d'exécution graphique des applications où le vendeur insiste sur le matériel certifié en tant que partie de la T&C pour le soutien. Types de médias ont tendance à tourner les boîtes-dessus assez rapidement et d'occasion sont relativement bon marché. De mémoire pour les anciens modèles (DDR1 dans ce cas) perd de son sex-appeal et le tend à la surface sur le marché secondaire à des remises importantes (parfois 80% ou plus) hors de la liste de prix. Il est aussi tout à fait un important marché secondaire pour les disques SCSI à travers des vêtements, des scsi4me.com.

J'ai trouvé HP internet et le service téléphonique tout à fait OK lors de la commande de diverses pièces, comme des conduits d'air, des ventilateurs et dissipateurs de chaleur pour le XW9300 que je construit. Il y a aussi pas mal marché tiers dans des tenues qui achètent d'occasion à la vente aux enchères et les dépouillent de leurs pièces. Un rapide troll par l'intermédiaire d'Ebay tourné plusieurs XW9300 s $US600$à 1 000$, un pour environ 1000 $avec 8 go de RAM.

Cette stackoverflow l'affichage a une discussion plus approfondie de l'achat de xeon et opteron base de systèmes de postes de travail.

22voto

Martin Beckett Points 60406

L'avantage des fichiers mappés en mémoire est que vous pouvez ouvrir un fichier beaucoup plus gros que 4 Go (presque infini sur NTFS!) Et y insérer plusieurs fenêtres de mémoire <4 Go.
C'est beaucoup plus efficace que d'ouvrir un fichier et de le lire en mémoire. Sur la plupart des systèmes d'exploitation, il utilise le support de pagination intégré.

14voto

Rob Walker Points 25840

Cela ne devrait pas être un problème avec un système d’exploitation 64 bits (et une machine qui a autant de mémoire).

Si malloc n’arrive pas à s’en sortir, le système d’exploitation fournira certainement des API permettant d’allouer directement de la mémoire. Sous Windows, vous pouvez utiliser l'API VirtualAlloc .

12voto

Steven A. Lowe Points 40596

cela dépend du compilateur C que vous utilisez, et sur quelle plate-forme (bien sûr) mais il n'y a pas de raison fondamentale pour laquelle vous ne pouvez pas allouer la plus grande partie de la façon contiguë de la mémoire disponible - peut-être moins que vous avez besoin. Et bien sûr, vous devrez peut-être l'aide d'un système 64 bits pour l'adresse que beaucoup de RAM...

voir Malloc pour l'histoire et les détails

appel HeapMax dans alloc.h pour obtenir le plus grand bloc disponible taille

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X