De ce que j'ai compris de ce probleme:
Quand tu fais *foo = 2+*foo et que tu compile en -O0 comme un gore. Tu as 3 instruction qui sont emise:
register = load (foo)
register = register + 2
store (register, foo)
le premier est load, le deuxieme est hit et la troisieme instruction est store.
Le probleme load hit store apparait quand tu fais un truc comme
- foo = 2+*foo
- foo = 3+*foo
Ce probleme vient du fait que de facon general, le compilateur ne peut pas optimiser le code. Il est obliger de lire et d'ecrire en memoire 2 fois. C'est toute la discussion du mot cle restrict et C ou du compiler-specific __restrict (que tous les compilateurs raisonnablent supportent).
Le cout est lie au fait que le compilateur est oblige de lire apres l'ecriture et donc il y a plein de chose qu'il ne peux pas faire, comme par exemple du prefetch logiciel.