11 votes

La copie sur écriture empêchera-t-elle la duplication des données sur les matrices ?

Je suis en train de programmer un client API web en PHP qui analyse les données CSV en tableaux associatifs et je veux protéger mes utilisateurs de la duplication des données lorsqu'ils utilisent ces tableaux.

Mes utilisateurs n'écriront jamais dans ces tableaux (en théorie, ils pourraient le faire, mais cela n'a aucun sens en pratique).

Maintenant ma question est... si mes utilisateurs passent ces tableaux en tant qu'arguments aux méthodes, est-ce que le mécanisme de copie sur écriture de PHP empêchera la duplication des données ou est-ce que toute méthode qui n'accepte pas explicitement une référence à un tableau recevra une copie complète du tableau ?

15voto

Mahn Points 5565

Copy on write, comme son nom l'indique, signifie qu'aucune variable n'est copiée tant que quelque chose n'est pas écrit ; tant que pas un seul octet n'est modifié dans la variable transmise, PHP se charge d'éviter les doublons inutiles automatiquement et sans avoir besoin d'utiliser des références explicites grâce à ce mécanisme.

Cet article explique en détail comment cela est implémenté dans le code source de PHP, et comme l'article le suggère, en utilisant xdebug on peut facilement vérifier que les variables ne sont pas dupliquées avec la fonction xdebug_debug_zval.

En outre, cette réponse ici sur SO a plus sur la copie sur l'écriture.

2voto

Evert Points 17625

Si vous ne les modifiez pas, les tableaux ne seront pas copiés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X