• [^] # Re: Journal bookmark inutile.

    Posté par . 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:

    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 statique
    struct mount_ops* [MAXFS];
     // dont chaque élément pointe vers une structure xxx_ops
    mount_ops[EXT2] = &ext2_mount_ops;
     // l'instance d'un objet "polymorphe" contient un index et non plus un pointeur
    struct {mount_ops_idx = EXT2, ...} vnode
    // et l'appel se fait comme cela
    mount_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