Go 클로저의 메모리 레이아웃
다른 클로저 구현을 활용하는 JavaScript와 달리 Go 클로저는 힙에 저장됩니다. 수명을 가변적으로 유지합니다.
클로저를 위한 메모리 할당
클로저를 생성하는 다음 함수를 고려하세요.
<code class="go">type M int func (m *M) Adder(amount int) func() { return func() { *m = *m + amount } }</code>
a := m을 호출할 때 .Adder(), 두 개의 힙 할당 발생:
반환된 func() 값의 메모리 공간
반환된 func() 값은 :
따라서 총계는 이 예에서 클로저의 메모리 공간은 32비트 플랫폼에서 20바이트, 64비트 플랫폼에서 32바이트입니다.
예:
<code class="go">func closure() func() *byte { var b [4 * 1024]byte return func() *byte { return &b[0] } }</code>
클로저() 호출 할당:
총 메모리 할당량은 4112바이트입니다.
위 내용은 Go 클로저는 실제로 얼마나 많은 메모리를 소비합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!