struct{fonction1=ext2_function1,...}ext2_mount_ops;// l'insance d'un objet contient un pointeur vers xxx_ops.struct{mount_ops=ext2_mount_ops,....}vnode;vnode->mount_ops->function1(...);//appel
on aurait
// un tableau statiquestructmount_ops*[MAXFS];// dont chaque élément pointe vers une structure xxx_opsmount_ops[EXT2]=&ext2_mount_ops;// l'instance d'un objet "polymorphe" contient un index et non plus un pointeurstruct{mount_ops_idx=EXT2,...}vnode// et l'appel se fait comme celamount_ops[vnode->mount_ops_idx]->function1(...)
Donc en gros rajouter une opération arithmétique sur un pointeur (l'addresse de mount_ops est connu au moment du link) pour calculer l'addresse de la function1(), Pour le même nombre de déférencement de pointeurs. (vnode->idx, mount_opt+IDX->ext2_mount_ops+OFFSET versus vnode->mount_ops->0+OFFSET). Ça serait peut-être même mieux au niveau de l'utilisation du cache cpu et pourrait consommer moins de mémoire car IDX n'a pas besoin d'avoir la représentation d'un pointeur, un octet devrait être suffisant. Que de spéculations :p
[^] # Re: Journal bookmark inutile.
Posté par benja . En réponse au journal faille Linux 0 day du 19 janvier 2016. Évalué à 1.
L'idée c'est au lieu d'avoir par exemple:
on aurait
Donc en gros rajouter une opération arithmétique sur un pointeur (l'addresse de mount_ops est connu au moment du link) pour calculer l'addresse de la function1(), Pour le même nombre de déférencement de pointeurs. (vnode->idx, mount_opt+IDX->ext2_mount_ops+OFFSET versus vnode->mount_ops->0+OFFSET). Ça serait peut-être même mieux au niveau de l'utilisation du cache cpu et pourrait consommer moins de mémoire car IDX n'a pas besoin d'avoir la représentation d'un pointeur, un octet devrait être suffisant. Que de spéculations :p