Oui, tout objet est alloué sur le tas, mais ça ne veut pas dire que lors de l'instanciation d'un objet « pur données », le compilateur n'est pas capable d'en déterminer sa taille et d'allouer juste ce qu'il faut. En d'autres termes, si j'étais en C++, je pourrais faire un truc du genre (pas du tout efficace, mais pour montrer l'idée) :
// Allocation de tous les membres d'une structure sur le tas.size_ttotal_size=sizeof(int)+MAX*sizeof(wchar_t)+sizeof(Titi);void*memory=operatornew(total_size);wchar_t*str=new((char*)memory+sizeof(int))wchar_t[MAX];Titi*t=new((char*)memory+sizeof(int)+sizeof(wchar_t)*MAX)Titi;// ...*reinterpret_cast<int*>(memory)=1;*reinterpret_cast<wchar_t*>((char*)memory+sizeof(int))[0]='a';*reinterpret_cast<Titi*>((char*)memory+sizeof(int)+MAX*sizeof(wchar_t)).someField=...;
[^] # Re: Fin de la pureté de Java
Posté par lasher . En réponse à la dépêche Java 8 et NetBeans 8 sont disponibles. Évalué à 2.
Oui, tout objet est alloué sur le tas, mais ça ne veut pas dire que lors de l'instanciation d'un objet « pur données », le compilateur n'est pas capable d'en déterminer sa taille et d'allouer juste ce qu'il faut. En d'autres termes, si j'étais en C++, je pourrais faire un truc du genre (pas du tout efficace, mais pour montrer l'idée) :