Language Mechanics On stacks And Pointers--golang

golang堆栈和指针的语言机制

前言

  1. 本节专注于:栈和指针。

介绍

  1. 当使用指针不正确时,可能会产生bug或性能问题。特别是当写多线程软件时。所以很多编程语言试图从开发者的角度去隐藏指针。然而,如果你想使用go去编程,你没有任何方式可以去避免它。对指针没有很深的理解,你将很难去写出干净,简洁,高效的代码。

范围界限

  1. 在范围界限内执行的函数,将为每个对应的函数提供单独的内存空间。每个框架允许一个函数在他们的上下文执行,并且提供流量控制。每个函数在它的框架内通过指针可以直接访问内存,但是访问它边界外的内存要求间接访问。一个函数访问它框架外的内存时,这个内存必须是被共享给该函数的。首先要理解和学习这个些框架边界所设定的限制和机制。
  2. 当一个函数被调用,在两个范围之间发生过渡。代码从调用函数的执行范围准换到被调用函数的范围内。如果函数调用外部数据,那这个数据必须从一个函数执行传递至另一个函数。go语言中,在两个函数间传递的数据被叫做 值传递
  3. 通过 值传递 数据的好处是可读性。主调函数中的值将被拷贝至被调函数。这就是为什么我把值传递表达为所即所得,因为你看到的就是你得到的。值传递的规则决定了 两个函数之间同等开销。有助于保持一个好的预期模型,即一个函数调用所花费的开销明确。
  4. 下面为通过值传递的示例:
package main

func main() {
    // Declare variable of type int with a value of 10.
    count := 10
    // Display the "value of" and "address of" count.
    println("count:\tValue Of[", count, "]\tAddr Of[", &count, "]")
    // Pass the "value of" the count.
    increment(count)
    println("count:\tValue Of[", count, "]\tAddr Of[", &count, "]")
}
//go:noinline
func increment(inc int) {
    // Increment the "value of" inc.
    inc++
    println("inc:\tValue Of[", inc, "]\tAddr Of[", &inc, "]")
}

引用

  1. https://www.goinggo.net/2017/05/language-mechanics-on-stacks-and-pointers.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值