Bon du coup voici comment j’ai procédé. Je vous préviens, c’est très… euh… on va dire empirique. 
NB : Chaque mesure de la consommation mémoire est effectuée à l’aide de echo 3 > /proc/sys/vm/drop_caches ; free et la valeur correspond à la deuxième ligne (+/- buffers/cache).
Pour forcer plusieurs instances de PHP, j’ai lancé autant de wget que nécessaire en arrière plan via une boucle for. Typiquement : for X in 1 2 3; do { wget -O out.$X 127.0.0.1/test.php & }; done
[ul][li] faire tomber un max de services (MySQL, Dns, Cron, …) pour éviter les interférences[/li]
[li] à vide = 24472 ko[/li]
[li] apache 1 worker = 27928 ko (+3456)[/li]
[li] apache 2 workers = 28980 ko (+ 1052)[/li]
[li] apache 3 workers = 29652 ko (+672)[/li]
[li] 1 php = 33440 ko (+ 3788)[/li]
[li] 2 php = 37252 ko (+ 3812)[/li]
[li] 3 php = 40992 ko (+ 3740)[/li][/ul]
Déjà, on peut constater que les instances PHP ne partagent aucune mémoire, chaque nouvelle instance consomme autant de mémoire que la précédente. Ça m’étonne un peu mais bon y’a sûrement une explication logique (pourtant, les libs partagées devraient être communes non ? En 64 bits les binaires sont censés n’utiliser que du code position-independent donc pages mémoire communes…).
Concernant Apache, comme on pouvait s’y attendre vu qu’il s’agit de process forkés (donc en COW) la majorité du bazar est partagée.
Pour bien faire il faudrait que je pousse les mesures plus loin que 3 instances de chaque, et bien évidemment que je fasse ça dans des conditions réelles (installer les modules PHP ; une vraie page web va consommer un poil plus qu’un simple echo “hello” – mais du coup y’aura le souci de MySQL qui viendra fausser les mesures, à moins que je ne chauffe son cache d’une manière ou d’une autre pour lui faire utiliser tout ce à quoi il a le droit).
Et faudra aussi que je reconfigure mod_evasive qui grogne quand je lui balance une 10aine de requêtes simultanées. 
Sur le principe lui-même, quelqu’un a des commentaires ? Des “failles” évidentes de méthodologie que j’aurais zappé ?