Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1808 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Allocation très grande taille mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Allocation très grande taille mémoire

n°1873979
sososo8
Posté le 16-04-2009 à 16:43:57  profilanswer
 

Bonjour,
 
Je suis dans le flou concernant l'allocation de larges plages de mémoire.
 
L'allocation (dynamique) de mémoire est limitée à 4Go, dans la théorie, puisque le paramètre de l'opérateur new est de type size_t donc lui-même 32 bits. Sur un système 32 bits, ça parait logique puisque la RAM est de toute façon limitée à 4Go. Ma question est : qu'en est-il sur un système 64 bits par exemple ?  
 
Est-il possible dans un programme en C ou C++ d'allouer dynamiquement un volume de 16 Go par exemple (en supposant qu'on dispose de suffisamment de RAM) ?  
Est-ce totalement suicidaire de toute façon du point de vue performance ?
 
Dernier point : j'utilise new (nothrow) pour vérifier l'allocation mémoire, mais j'obtiens malgré tout une erreur de type invalid allocation size si la taille est trop importante (idem avec un try/catch). Je suis obligée de faire un test auparavant, avec une valeur assez... arbitraire dont je ne suis pas du tout sûre...

mood
Publicité
Posté le 16-04-2009 à 16:43:57  profilanswer
 

n°1874002
theshockwa​ve
I work at a firm named Koslow
Posté le 16-04-2009 à 17:08:10  profilanswer
 

un size_t doit faire au moins 64 bits sur un os 64 bits. Je ne vois pas pourquoi interdire d'allouer 16Go d'un coup si la machine est capable de le supporter ... Après, ca peut être rejeté pour diverses raisons, dépendant, par exemple, de ton OS
 
edit : typo (bis)


Message édité par theshockwave le 17-04-2009 à 10:14:49

---------------
last.fm
n°1874114
Taz
bisounours-codeur
Posté le 16-04-2009 à 22:47:06  profilanswer
 

sososo8 a écrit :

Bonjour,

 

Je suis dans le flou concernant l'allocation de larges plages de mémoire.

 

L'allocation (dynamique) de mémoire est limitée à 4Go, dans la théorie, puisque le paramètre de l'opérateur new est de type size_t donc lui-même 32 bits. Sur un système 32 bits, ça parait logique puisque la RAM est de toute façon limitée à 4Go. Ma question est : qu'en est-il sur un système 64 bits par exemple ?

La RAM n'est pas limitée à 32bits. Voir PAE, etc.

 
sososo8 a écrit :


Est-il possible dans un programme en C ou C++ d'allouer dynamiquement un volume de 16 Go par exemple (en supposant qu'on dispose de suffisamment de RAM) ?
Est-ce totalement suicidaire de toute façon du point de vue performance ?

Ca fonctionne très bien.
Pour vraiment optimiser, il faut avoir un OS (Solaris, Linux) qui gère les hugepages (genre 4MB) pour éviter un massacre au niveau du TLB. Compte combien ça fait 16Go en pages de 4K/8K ...

 


theshockwave: les allocations paressesseuses, ça existe. Sur ton OS 64bits, tu peux à l'aise allouer plusieurs To alors que t'as qu'une poignée de Go de RAM.

Message cité 1 fois
Message édité par Taz le 16-04-2009 à 22:47:26
n°1874169
theshockwa​ve
I work at a firm named Koslow
Posté le 17-04-2009 à 09:01:05  profilanswer
 

Taz a écrit :


theshockwave: les allocations paressesseuses, ça existe. Sur ton OS 64bits, tu peux à l'aise allouer plusieurs To alors que t'as qu'une poignée de Go de RAM.


 
Je me doute que ce n'est pas limité à la RAM (au moins pour une question de swap) ... mais, dans le cas hypothétique où on aurait été autorisé à allouer plus de mémoire que disponible (ram + swap), il se passerait quoi, si on venait à écrire partout sur la mémoire "allouée" ?


---------------
last.fm
n°1874177
Taz
bisounours-codeur
Posté le 17-04-2009 à 09:24:14  profilanswer
 

theshockwave a écrit :


 
Je me doute que ce n'est pas limité à la RAM (au moins pour une question de swap) ... mais, dans le cas hypothétique où on aurait été autorisé à allouer plus de mémoire que disponible (ram + swap), il se passerait quoi, si on venait à écrire partout sur la mémoire "allouée" ?


deux cas de figures:
- ton OS a une heuristique, pour te laisser plus ou moins te gaver virtuellement (overcommit) (solaris par défaut, linux avec un vm.overcommit_memory=2)
- son heuristique est tellement simple (linux vm.overcommit_memory=0 ou 1, solaris je l'ai plus en tête, on peut changer le comportement), que jamais malloc ne donnera NULL. Si le système vient à manquer de mémoire, le noyau fera le ménage (OOM killer)
 
Les deux comportements ont leurs utilités.

n°1874196
Un Program​meur
Posté le 17-04-2009 à 10:03:58  profilanswer
 

* Ce qui m'emmerde avec les implementations d'overcommit, c'est que le bon choix est a faire application par application; mais que les implementations ne permettent un reglage que global.
 
* Pour l'OP: j'ai teste sur une machine avec 32 G de memoire, aucun probleme a allouer un tableau contigu de 16G.
 
* Il y a plusieurs choses a ne pas confondre:
- la taille de l'espace memoire adressable par un processus (ca va dependre de l'architecture et de l'OS)
- la taille de l'espace memoire gerable par l'OS
- la taille de l'espace memoire physiquement adressable
- la taille des registres d'adresse
- la taille des registres de donnee
 
La premiere est toujours inferieure a la seconde.
La troisieme peut etre plus petite, egale ou plus grande que les deux suivantes.
La quatrieme peut etre plus petite que la premiere.  Un probleme recurrent dans les architectures, c'est la limitation de la premiere (la suivante est confinee a l'OS, et la derniere a l'implementation, on peut utiliser tous les trucs qu'on veut beaucoup plus facilement).  On se retrouve quand meme souvent a utiliser des trucs pour l'etendre au dela de la quatrieme (segmentation, pagination sans parler des trucs immondes qui ont ete fait sur les premieres machines decimales).
Un autre probleme recurrent, est quand la taille des registres d'adresse est superieure a la taille de la memoire utilisable.  Il est tentant pour les programmeurs d'utiliser les bits supplementaires pour une ou l'autre chose; et quand l'evolution incite a avoir plus de memoire, on est plus ou moins bloque.  Par pitie pour ceux qui vont devoir maintenir vos programmes, ne le faite pas en 64 bits.
 
Le "nombre de bits" d'un processeur est -- sauf manipulation par le departement marketting, manipulations ayant d'ailleurs ete faites dans les deux sens -- la taille des registres de donnees.  Historiquement, il n'a pas particulierement de rapport avec les tailles adressables.  Sauf que la mode est aux registres d'usage generaux et donc que c'est vecu de plus en plus comme etant aussi la taille des registres d'adresse.

n°1874640
Un Program​meur
Posté le 18-04-2009 à 12:34:20  profilanswer
 

Pour ceux que le sujet intéresserait, les écrits de John Mashey sont intéressants.  Entre autres
http://queue.acm.org/detail.cfm?id=1165766
et le premier résultat de
http://groups.google.com/groups/se [...] ll&spell=1

n°1874649
el muchach​o
Comfortably Numb
Posté le 18-04-2009 à 13:00:42  profilanswer
 

:jap: effectivement, un article très fouillé, faut dire que le pedigree de l'auteur ne laisse pas trop de doutes sur ses connaissances:D


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1874655
Un Program​meur
Posté le 18-04-2009 à 13:09:45  profilanswer
 

el muchacho a écrit :

:jap: effectivement, un article très fouillé, faut dire que le pedigree de l'auteur ne laisse pas trop de doutes sur ses connaissances:D


 
comp.arch a perdu beaucoup de son intérêt depuis que lui et Andy Glew n'y participent plus.  Si l'archi des ordinateurs t'intéresse, cherche aussi les messages de ce dernier dans groups.google.

n°1874718
Glock 17Pr​o
Posté le 18-04-2009 à 17:20:30  profilanswer
 

Un Programmeur a écrit :

Pour ceux que le sujet intéresserait, les écrits de John Mashey sont intéressants.  Entre autres
http://queue.acm.org/detail.cfm?id=1165766
et le premier résultat de
http://groups.google.com/groups/se [...] ll&spell=1


faut être motivé pour lire tout ça  :ouch:

mood
Publicité
Posté le 18-04-2009 à 17:20:30  profilanswer
 

n°1874801
Elmoricq
Modérateur
Posté le 18-04-2009 à 23:34:56  profilanswer
 

[:marc]

n°1876306
Glock 17Pr​o
Posté le 22-04-2009 à 15:09:12  profilanswer
 

bon bon ok


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Allocation très grande taille mémoire

 

Sujets relatifs
Libération de la mémoire sous Excel 2002Problème avec allocation dynamique de tableau (C)
Convertir un fichier en taille fixeRequête très simple
Différence entre pointeur et tableau, allocation dynamique et statique[Resolu] Gestion de la mémoire
Problème de "taille"Quelle est la commande .bat qui récupère la taille d'un disque dur ?
Apache2 Consommation Mémoire, Ressources, Temps Execution[Graphique] Modifier la taille d'un tableau
Plus de sujets relatifs à : Allocation très grande taille mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR