Veuillez ne pas marquer cela comme une question en double, car cela est plus spécifique à golang et demande des conseils sur les meilleures pratiques lors de la déclaration de variables pour stocker des tableaux de grands octets lors de la lecture d'un canal. Pardonnez-moi pour cette question idiote, mais la raison de cette question est simplement ma curiosité de déterminer quelle pourrait être la meilleure pratique pour écrire un consommateur de flux de haute performance lisant un tableau d'octets de grande taille à partir de plusieurs canaux. (bien que l'optimisation prématurée soit la racine de tous les maux, c'est plus une curiosité). J'ai lu des réponses à propos de similaire senario spécifique à C
here, mais je demande une réponse spécifique à aller, car c'est un langage collecté garbage, et leur documentation here dit "Du point de vue de la justesse, vous n'avez pas besoin de savoir où la variable est attribué ".En golang, qu'arrive-t-il à une variable après qu'elle soit hors de portée d'une boucle, d'une condition ou d'un cas?
Si je le code suivant pour lire d'un canal,
for {
select {
case msg := <-stream.Messages():
...snip...
variable msg
est dans le cadre de la déclaration de cas.
- Qu'arrive-t-il une fois est hors de portée de
case
déclaration? Puisque ceci est déclaré dans la même fonction native, et que la taille destream
pourrait être une grande tranche d'octets, la variable va-t-elle être stockée dans le tas ou la pile, et si elle est heap, sera-t-elle collectée? image? Comme c'est dans une boucle infinie pour, et que la taille destream
est une grande tranche d'octets, crée la variable et alloue de la mémoire chaque fois qu'un overhead, ou devrais-je déclarer la variable devant, et continue de l'écraser à chaque itération, de sorte que s'il y a un ramassage des ordures impliqué, dont je ne suis pas sûr, je pourrais peut-être réduire les ordures? - Ne devrais-je pas être dérangé à ce sujet du tout?
Merci.