Manipulation de très très gos tableau en C++

cs_CHRAIBI Messages postés 3 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 5 mai 2003 - 5 mai 2003 à 20:46
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Derniè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 ?

Said
Merci infiniment

6 réponses

cs_CHRAIBI Messages postés 3 Date d'inscription jeudi 10 avril 2003 Statut Membre Derniè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
>
>
>
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 mai 2003 à 22:31
RECTIF faute de frappe:
(2^32 - 1) < 10^12
BruNews, ciao...
0
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
6 mai 2003 à 11:33
tu peux aussi faire un p'tit tour par la bas (Win32) : http://www.codeguru.com/cpp_mfc/ia.html
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
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 :)
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
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.

Core Breaker :)
0
Rejoignez-nous