Question

Je suis sur une plate-forme 64 bits, de sorte que tous les EIM de mémoire sont 8 octets.

Donc, pour obtenir une estimation de l'utilisation de la mémoire d'un tableau, dois-je ajouter 8 octets au sizeof (DATATYPE) pour chaque entrée dans le tableau.

Exemple:

short unsigned int *ary = new short unsigned int[1000000]; //length 1mio
//sizeof(short unsinged int) = 2bytes 
//sizeof(short unsinged int*) = 8 bytes

Alors chaque entrée ne prenne 10bytes? et mon tableau de longueur de 1Mio utiliser donc atleast 10megabytes?

Merci

Était-ce utile?

La solution

Non, vous ne recevez pas un pointeur pour chaque index de tableau. Vous obtenez un seul pointeur pointant vers le tableau, qui est un bloc contigu de mémoire, ce qui est la raison pour laquelle l'adresse de tout indice peut être calculé à partir de l'indice lui-même plus l'adresse du tableau.

Par exemple, si la a variable connue par l'emplacement de mémoire 0xffff0012 est réglé sur 0x76543210, ils pourraient être mis en mémoire:

            +-------------+ This is on the stack or global.
0xffff0012  |  0x76543210 |
            +-------------+

            +-------------+ This is on the heap (and may also
0x76543210  |  a[     0]  |   have some housekeeping information).
            +-------------+
0x76543212  |  a[     1]  |
            +-------------+
0x76543214  |  a[     2]  |
            +-------------+
0x76543216  |  a[     3]  |
            +-------------+
               :       :
            +-------------+
0x7672B68E  |  a[999999]  |
            +-------------+

et vous pouvez voir que l'adresse de l'indice n est 0x76543210 + n * 2.

Alors, vous allez effectivement avoir un pointeur de 8 octets et un million de short 2 octets qui, dans votre cas, les totaux 2,000,008 octets.

Ceci est au-dessus de tout frais généraux d'entretien de malloc qui, comme le pointeur lui-même, est minuscule par rapport à votre tableau réel.

Autres conseils

Non, il n'y a qu'un seul pointeur ici, pas un pointeur par entrée. Votre estimation de la taille est 1000000 * 2 + 8.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top