Disposition en mémoire des fermetures Go
Contrairement à JavaScript, qui exploite une implémentation de fermeture différente, les fermetures Go sont stockées sur le tas en raison à une longévité variable.
Allocation de mémoire pour les fermetures
Considérez la fonction suivante qui génère une fermeture :
<code class="go">type M int func (m *M) Adder(amount int) func() { return func() { *m = *m + amount } }</code>
Lors de l'appel d'un := m .Adder(), deux allocations de tas se produisent :
Empreinte mémoire de la valeur func() renvoyée
La valeur func() renvoyée consomme :
Par conséquent, le total L'empreinte mémoire de la fermeture dans cet exemple est 20 octets sur les plates-formes 32 bits, 32 octets sur les plates-formes 64 bits.
Exemple :
<code class="go">func closure() func() *byte { var b [4 * 1024]byte return func() *byte { return &b[0] } }</code>
L'appel de Closure() alloue :
Résultant en une allocation de mémoire totale de 4112 octets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!