<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 17175 -->
<!-- Reviewed: no -->
<sect1 id="zend.memory.overview">
    <title>Présentation</title>

    <sect2 id="zend.memory.introduction">
        <title>Introduction</title>

        <para>
            Le composant <classname>Zend_Memory</classname> est destiné à gérer des données
            dans un environnement où la mémoire est limitée.
        </para>

        <para>
            Les objets mémoire (conteneurs de mémoire) sont produits par le manager de mémoire
            sur demande et mis en cache/chargés d'une manière transparente quand c'est
            nécessaire.
        </para>

        <para>
            Par exemple, si la création ou le chargement d'un objet entraîne une utilisation
            de mémoire totale excédant la limite que vous spécifiez, certains objets gérés sont
            copiés en cache à l'extérieur de la mémoire. De cette façon, la mémoire totale utilisée
            par les objets gérés n'excède pas la limite que vous devez mettre en application.
        </para>

        <para>
            Le manager de mémoire utilise les <link linkend="zend.cache.backends">backends
            Zend_Cache</link> comme fournisseurs de stockage.
        </para>

        <example id="zend.memory.introduction.example-1">
            <title>Utiliser le composant Zend_Memory</title>

            <para>
                <methodname>Zend_Memory::factory()</methodname> instancie l'objet de management
                de la mémoire avec les options spécifiques du backend.
            </para>

            <programlisting language="php"><![CDATA[
$backendOptions = array(
    'cache_dir' => './tmp/'
    // Dossier où les blocks de mémoire peuvent être stockés
);

$memoryManager = Zend_Memory::factory('File', $backendOptions);

$loadedFiles = array();

for ($count = 0; $count < 10000; $count++) {
    $f = fopen($fileNames[$count], 'rb');
    $data = fread($f, filesize($fileNames[$count]));
    $fclose($f);

    $loadedFiles[] = $memoryManager->create($data);
}

echo $loadedFiles[$index1]->value;

$loadedFiles[$index2]->value = $newValue;

$loadedFiles[$index3]->value[$charIndex] = '_';
]]></programlisting>
        </example>
    </sect2>

    <sect2 id="zend.memory.theory-of-operation">
        <title>Aspect théorique</title>

        <para>
            <classname>Zend_Memory</classname> travaille avec les concepts suivants :
            <itemizedlist>
                    <listitem>
                        <para>Manager de mémoire</para>
                    </listitem>

                    <listitem>
                        <para>Conteneur de mémoire</para>
                    </listitem>

                    <listitem>
                        <para>Objet de mémoire verrouillé</para>
                    </listitem>

                    <listitem>
                        <para>Objet de mémoire mobile</para>
                    </listitem>
                </itemizedlist>
            </para>

        <sect3 id="zend.memory.theory-of-operation.manager">
            <title>Manager de mémoire</title>

            <para>
                Le manager de mémoire produit des objets de mémoire (verrouillé ou mobile) sur
                demande de l'utilisateur et les retourne encapsulé dans un objet conteneur de
                mémoire.
            </para>
        </sect3>

        <sect3 id="zend.memory.theory-of-operation.container">
            <title>Conteneur de mémoire</title>

            <para>
                Le conteneur de mémoire a un attribut <code>value</code> virtuel ou réel de
                type chaîne de caractères. Cet attribut contient la valeur de donnée indiquée au
                moment de la création de l'objet mémoire.
            </para>

            <para>
                Vous pouvez exploiter cet attribut <code>value</code> comme une propriété
                d'objet : <programlisting language="php"><![CDATA[
$memObject = $memoryManager->create($data);

echo $memObject->value;

$memObject->value = $newValue;

$memObject->value[$index] = '_';

echo ord($memObject->value[$index1]);

$memObject->value = substr($memObject->value, $start, $length);
]]></programlisting></para>

                <note>
                <para>
                    Si vous utilisez une version de <acronym>PHP</acronym> inférieure à 5.2, utilisez la méthode
                    <link linkend="zend.memory.memory-objects.api.getRef">getRef()</link> au lieu
                    d'accéder directement à la valeur de la propriété.
                </para>
            </note>
        </sect3>

        <sect3 id="zend.memory.theory-of-operation.locked">
            <title>Objet de mémoire verrouillé</title>

            <para>
                Les objets de mémoire verrouillés sont toujours stockés dans la mémoire. Les
                données stockées dans la mémoire verrouillée ne sont jamais mis en cache.
            </para>
        </sect3>

        <sect3 id="zend.memory.theory-of-operation.movable">
            <title>Objet de mémoire mobile</title>

            <para>
                Les objets de mémoire mobiles sont mis en cache et chargés de manière
                transparente de/vers le cache par <classname>Zend_Memory</classname> si c'est
                nécessaire.
            </para>

            <para>
                Le manager de mémoire ne met pas en cache des objets ayant une taille plus
                petite que le minimum spécifié dans un soucis de performances. Voir <xref
                linkend="zend.memory.memory-manager.settings.min-size" /> pour plus de
                détails.
            </para>
        </sect3>
    </sect2>
</sect1>