Supposons que j'ai une structure de données C contenant de nombreux champs de données (>15) :
struct MyData
{
int x;
float y;
...
}
En Java, je peux stocker un pointeur vers une MyData en tant que long, et accéder aux membres de la structure de données C par le biais d'appels JNI :
long mydata_p = MyDataJNI.alloc();
int x = MyDataJNI.getX( mydata_p );
float y = MyDataJNI.getY( mydata_p );
...
Cependant, les appels à ces fonctions sont scandaleusement coûteux (10x-100x le coût d'un appel de fonction C équivalent). Ceci est vrai même si l'implémentation getX, getY, ... est aussi simple que :
return ((MyData*)())->x
Q1 : Pourquoi les appels JNI sont-ils si chers ? Que se passe-t-il d'autre qu'un appel à un pointeur de fonction ? (Pour référence, je regarde les appels JNI dans Android).
Q2 : Quel est le moyen le plus rapide de rendre tous les éléments de ma structure C disponibles à la couche Java ?