De manière surprenante à la fois les programmes ont donné la différence entre les deux pointeurs mêmes, même si les types de données étaient différentes .....malloc stocker les métadonnées
Comment fonctionne exactement malloc stocker ses données méta est ce que je tente de trouver avec cette petite expérience ...
Programme 1:
int main()
{
char *i,*j;
i=(char*)malloc (sizeof(char));
j=(char*)malloc (sizeof(char));
printf ("%x\n",i);
printf ("%x\n",j);
return 0;
}
sortie:
710010
710030
Programme 2:
int main()
{
int *i,*j;
i=(int*)malloc (sizeof(int));
j=(int*)malloc (sizeof(int));
printf ("%x\n",i);
printf ("%x\n",j);
return 0;
}
Sortie:
16b8010
16b8030
ce que j'avais à l'esprit avant ce programme:
| meta data of i | memory space of i | meta data of j | memory space of j |
mais les résultats ne confirment pas la théorie ....
FYI: [Ne pas diffuser le résultat de 'malloc'] (http://stackoverflow.com/q/605845/119527). –
^commentaire non pertinent – PRP
la fonction malloc() fonctionne avec des listes doublement liées plus un autre surcoût. Ainsi, les appels malloc successifs ne retourneront pas les adresses aux décalages attendus entre eux. En outre, char est promu à int dans un appel de fonction. En outre, la plupart des implémentations de malloc() fonctionnent avec des multiples de taille minimale pour réduire la quantité de calculs mathématiques nécessaires. En outre, de nombreuses implémentations de malloc() fonctionnent avec des pools de mémoire pré-alloués. Le résultat est que presque toutes les invocations malloc() acquièrent réellement plus de mémoire que prévu. – user3629249