Est ce que tu pourrais juste nous (me ?) montrer un bout du programme que tu utilise ?
Parce que, a priori, si ce que tu écrit est purement fonctionnel (et faire de l´impératif en Caml n´est pas ce qui se fait de mieux) alors d´une part ou ne peut passer les arguments que par valeur et pas par référence car une "fonction" n´a pas le droit de modifier ses arguments, mais surtout, il me semble que dans le cas d´un code fonctionnel comme l´argument de la fonction n´a pas besoin d´être sauvegarde (après tout c´est le retour d´une autre fonction, et il n´ais jamais enregistré dans une "variable" (pour autant que ça ais un sens en Caml)) le gestionnaire de mémoire doit optimiser tout ça.
Mais sinon, pour répondre à ta question c´est possible. les reférence sont passé ... par référence. C´est à dire qu´une variable de type ´a ref est exactement du même type qu´une variable
a &var;
en C++, à savoir qu´elle est passé par référence (ou plus exactement, la référence est passé par valeur et donc son contenu par référence)... (mais là, je m´embrouille).
En bref, il suffit de faire comme avec la fonction incr ;
let incr = function x -> x:=succ !x ;;
incr : int ref -> unit = <fun>
La fonction prend une référence. Donc même si c´est un tableau de 3 Go qui est passé, seul les 4 octets (probablement plus en fait) de la référence sont passé en argument.
C´est ce que tu veux je suppose.