Supposons que je dispose d'un tableau de taille 78719476736 octets. gardez à l'esprit que ce tableau est alloué dynamiquement en utilisant malloc dans mon code C. Supposons que malloc renvoie un pointeur valide après avoir alloué autant de mémoire. La taille de ce tableau est supérieure à UINT_MAX (4294967295), c'est-à-dire limite maximale d'un entier non signé (32 bits)Accès à la mémoire supérieure à UINT_MAX * 4 en C?
Supposons que mon code ressemble à quelque chose ci-dessous.
int *buf;
buf = (int*)malloc(78719476736);
Ici 78719476736 est supérieur à 4 * UINT_MAX. Maintenant, si je dois me référer à tous les éléments de buf, puisque buf est int *, il sera 32 bits, donc il ne sera pas capable d'adresser tous les éléments de mémoire que j'ai alloués en utilisant malloc (78719476736 octets). Ma question est que le code ci-dessus ne devrait pas être modifié pour rendre buf aussi long (variable de 64 bits) car seule une longue variable longue sera capable d'adresser la grande mémoire que j'ai allouée.
Code changé par ex.
unsigned long long int buf;
buf = (unsigned long long int*)malloc(78719476736);
En fait, je pense, la variable buf ne devrait pas être un pointeur plus que tout pointeur va être 32 bits de large et par conséquent, il ne sera pas en mesure d'accéder 78719476736 octets.
Il devrait donc être un entier long non signé et je devrai convertir la valeur du pointeur de retour malloc en un entier long non signé comme indiqué dans le code modifié ci-dessus et utiliser buf pour accéder à tous les éléments alloués.
Suis-je correct dans mes hypothèses ci-dessus?
ou
Suis-je quelque chose confus/manquant?
EDIT: Si elle aide,
Je travaille sur un bureau ayant sur un Windows XP Intel Core 2 Duo (CPU 64 bits). Donc, CPU sage, il ne devrait pas être un problème d'accès à plus de 4 Go d'espace d'adressage. Ce que tous les autres composants doivent être activés pour le support 64 bits, à savoir
a.) Comment puis-je activer le support du compilateur 64 bits lors de la compilation (je suis en utilisant Visual Studio 2005 Professional Edition)
b.) Support du système d'exploitation pour 64 bits - J'utilise Windows XP Professionnel.
Merci.
-AD.
S'il vous plaît me dire ce que le diable vous écrivez pour que je ne causer inadvertantly vous malloc 73Go sur mon serveur ... Pourquoi – Eric
73GB dans un grand tronçon? – dalle