diff options
Diffstat (limited to 'src/arch/instruction-int.h')
-rw-r--r-- | src/arch/instruction-int.h | 31 |
1 files changed, 9 insertions, 22 deletions
diff --git a/src/arch/instruction-int.h b/src/arch/instruction-int.h index beb6b50..b7bd5f3 100644 --- a/src/arch/instruction-int.h +++ b/src/arch/instruction-int.h @@ -60,22 +60,13 @@ struct _GArchInstruction /** * Il existe le besoin indéniable d'un verrou pour les accès aux instructions * liées. Il faut par ailleurs un verrou distinct pour les sources et les - * destination car une même instruction peut boucler sur elle même et la + * destinations car une même instruction peut boucler sur elle même et la * fonction g_arch_instruction_change_link() pose des verrous sur les * deux extrémités. * - * Par ailleurs, la consommation mémoire augmente vite : GRWLock pèse 16 - * octets et size_t mesure la taille d'un long sur 64 bits. - * - * Que ce soit avec les pointeurs (un allocateur aligne généralement les - * adresses retournées) ou avec les tailles (il est peu probable d'avoir - * 0x80000000 instructions d'origine), on dispose d'espace mémoire inutilisé - * adapté pour compresser la structure GArchInstruction. - * - * La GLib propose incidemment des fonctions g_bit_lock() / g_bit_unlock()... - * - * On perd au passage la distinction entre les accès en lecture et ceux en - * écriture, mais tant pis : la réduction de l'empreinte mémoire prime ! + * La GLib propose les fonctions g_bit_lock() / g_bit_unlock(), légères mais + * sans distinction entre lectures et écritures. Tant pis : la réduction de + * l'empreinte mémoire prime ! * * Par contre la documentation indique : * @@ -83,23 +74,19 @@ struct _GArchInstruction * Attempting to lock on two different bits within the same integer is not supported. * """ * - * Donc on conserve un compteur distinct pour chaque extrémité. + * Donc on doit bien conserver un compteur distinct pour chaque extrémité. + * Cela correspond de toute façon à la définition optimisée des tableaux + * suivante. */ - instr_link_t *from; /* Origines des références */ - instr_link_t *to; /* Instructions visées */ - gint from_count; /* Nombre de ces origines */ - gint to_count; /* Nombre de ces destinations */ + flat_array_t *from; /* Origines des références */ + flat_array_t *to; /* Instructions visées */ ArchInstrFlag flags; /* Informations complémentaires*/ }; -/* Bit de verrou pour les champs (from|to)_count */ -#define INSTR_LINK_LOCK_BIT 31 - - /* Définition générique d'une instruction d'architecture (classe) */ struct _GArchInstructionClass { |