cs_CHRAIBI
Messages postés3Date d'inscriptionjeudi 10 avril 2003StatutMembreDernière intervention 5 mai 2003
-
5 mai 2003 à 20:46
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 2007
-
7 mai 2003 à 06:18
J'ai essayé d'allouer dynamiquement (malloc ...) un tableau de 1O puissance 12 sous Windows, et ça ne marche pas ...
Auriez vous une solution qui me permet de manipuler en C++ des tableaux de cette taille sans trop altérer la performance d'accès aux données ?
Est ce que mapper un fichier ( image de ce tableau ) avec la memoire pourrait être une solution ?
cs_CHRAIBI
Messages postés3Date d'inscriptionjeudi 10 avril 2003StatutMembreDernière intervention 5 mai 2003 5 mai 2003 à 20:47
-------------------------------
Réponse au message :
-------------------------------
>
> J'ai essayé d'allouer dynamiquement (malloc ...) un tableau de 1O puissance 12 sous Windows, et ça ne marche pas ...
>
> Auriez vous une solution qui me permet de manipuler en C++ des tableaux de cette taille sans trop altérer la performance d'accès aux données ?
>
> Est ce que mapper un fichier ( image de ce tableau ) avec la memoire pourrait être une solution ?
>
> Said
> Merci infiniment
>
>
>
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 5 mai 2003 à 22:29
VirtualAlloc() sur Win32 pour grandes tailles.
Peu de chances que tu puisses allouer plus de 2 Go, 3 sur serveur si commutateur est positionné.
Sur 32 bits quel pointeur pourrait acceder a cette zone memoire si elle existait ?
(2^32 - 1) < 2^10 donc impossible. Revoit la conception de ton prog. Les valeurs de positionnement de fichiers sont par contre de 64 bits sur Win32, piste possible.
BruNews, ciao...
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 7 mai 2003 à 06:12
En principe tu peux acceder à plus de mémoire en considérant les registres de segment qui n'utilise que 13bits et que potentiellement un segement peut faire jusqu'a 2^24 pages de 4Ko soit 16Mo * 4Ko = 64Go et en tenant compte des 13bits du registre de segment soit 8K segemnt ce qui fait:
64Go * 8K = 512To !!
Mais la prog se situe au plus bas niveau
Core Breaker :)
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 7 mai 2003 à 06:18
Avec une taille pareille il vaut mieux passer par un fichier que tu vas indexé mais l'index doit être sur 64bits car tu aurras un dépassement, ça ne tiens pas sur 32bits ou alors considère que ton index est multiplié par 1E12 / 4E9 soit 250 ou 256 pour avoir une puissance de 2.