Maison  >  Article  >  développement back-end  >  Les paramètres formels occupent-ils de la mémoire en langage Go ?

Les paramètres formels occupent-ils de la mémoire en langage Go ?

WBOY
WBOYoriginal
2024-04-04 08:27:011044parcourir

En langage Go, les paramètres formels de type valeur n'occuperont pas de mémoire supplémentaire, tandis que les paramètres formels de type référence occuperont la taille du pointeur pointant vers les données réelles dans le tas.

Les paramètres formels occupent-ils de la mémoire en langage Go ?

Les paramètres formels du langage Go occupent-ils de la mémoire

En langage Go, les paramètres formels sont des paramètres transmis aux fonctions. Pour les types valeur (int, float, string), les paramètres formels sont stockés dans le cadre de pile de la fonction. Pour les types de référence (tranche, carte, canal), les paramètres formels sont stockés dans le cadre de pile de fonctions sous forme de pointeurs vers les données réelles dans le tas.

Qu'il occupe de la mémoire

Le fait que les paramètres formels occupent de la mémoire dépend du mécanisme de transmission des paramètres. Le langage Go utilise un mécanisme de transmission de valeurs, c'est-à-dire que les paramètres formels sont des copies des paramètres réels. Par conséquent, un paramètre de type valeur ne nécessite aucune mémoire supplémentaire, alors qu’un paramètre de type référence occupe la taille d’un pointeur vers les données réelles dans le tas.

Cas pratique :

Le code suivant démontre l'utilisation de la mémoire des paramètres formels de type valeur et de type référence :

package main

import "fmt"

func main() {
    // 值类型
    var a int = 100
    b := a // 赋值,b 是 a 的副本

    // 引用类型
    slice := []int{1, 2, 3}
    slc := slice // 赋值,slc 是 slice 的指针副本

    fmt.Printf("a: %d (栈)\n", a)
    fmt.Printf("b: %d (栈)\n", b)
    fmt.Printf("slice: %p (堆)\n", &slice)
    fmt.Printf("slc: %p (栈)\n", &slc)
}

Résultat de sortie :

a: 100 (栈)
b: 100 (栈)
slice: 0xc0000a8040 (堆)
slc: 0xc0000a8038 (栈)

Comme le montre le résultat de sortie, le paramètre formel de type valeur b est stocké dans la pile, occupant 4 octets de mémoire. Le paramètre de type référence slc est également stocké sur la pile, occupe 8 octets de mémoire et constitue un pointeur vers les données réelles du tas.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn