当前位置: 首页 > wzjs >正文

广州黄埔做网站公司自学网站开发多少时间

广州黄埔做网站公司,自学网站开发多少时间,html网页制作代码大全图片,简单网页制作成品免费下载什么是逃逸? 逃逸是指一个变量本来应该分配在栈(stack)上,但由于某些原因,最终被分配到了堆(heap)上。 类比: 栈就像一个临时的快餐盒,用来存放短期使用的数据。堆就像…

什么是逃逸?

逃逸是指一个变量本来应该分配在栈(stack)上,但由于某些原因,最终被分配到了堆(heap)上。

类比:

  • 栈就像一个临时的快餐盒,用来存放短期使用的数据。
  • 堆就像一个长期的仓库,用来存放需要长期存在的数据。
  • 如果快餐盒里的东西需要长期保存,就会被放到仓库里,这就是逃逸。

为什么会出现逃逸?

Go 的逃逸分析会决定变量是分配在栈上还是堆上。逃逸分析的准则是:

  1. 指向栈对象的指针不能存在堆上

    • 如果栈上的变量的地址被存储到堆上,那么当栈帧销毁时,堆上的指针会变成“悬空指针”,导致程序崩溃。
  2. 指向栈对象的指针不能超过该栈对象的存活期

    • 栈对象的生命周期很短,如果指针的生命周期比栈对象长,就会导致指针指向无效的内存。

类比:

  • 栈对象就像一个临时工,工作完成后就会离开。
  • 如果指针还指向这个临时工,但临时工已经走了,就会出问题。

逃逸分析的命令

go build -gcflags='-m -l' xxx.go
  • -m:打印逃逸分析的优化策略。
  • -l:取消内联(避免内联优化干扰分析结果)。

类比:

  • 这条命令就像是一个“侦探工具”,用来查看变量是否逃逸到堆上。

内存逃逸的影响

  1. 增加 GC 压力

    • 堆上的数据需要垃圾回收器(GC)管理,逃逸到堆上的变量会增加 GC 的负担。
  2. 造成内存碎片

    • 堆上的内存分配和释放不规则,容易导致内存碎片化,影响性能。

类比:

  • GC 就像清洁工,堆上的变量越多,清洁工的工作量就越大。
  • 内存碎片就像仓库里的空隙,浪费了空间。

什么时候会出现内存逃逸?

  1. 指针逃逸

    • 当栈上的变量的地址被传递到堆上时,变量会被分配到堆上。
    func foo() *int {x := 10 // x 是栈变量return &x // 返回 x 的地址,导致 x 逃逸到堆
    }
    
  2. 动态类型逃逸

    • 使用接口(interface)等动态类型时,变量可能会被分配到堆上。
    func bar() interface{} {x := 10 // x 是栈变量return x // x 被包装成接口类型,可能逃逸到堆
    }
    
  3. 栈空间不足

    • 如果栈空间不足以存放变量,变量会被分配到堆上。
  4. 变量大小不确定

    • 如果变量的大小在编译时无法确定,可能会被分配到堆上。

如何避免内存逃逸?

  1. 减少外部指针引用

    • 避免将栈变量的地址传递到堆上。
    func avoidEscape() {x := 10 // x 是栈变量use(x)  // 传递值而不是地址,避免逃逸
    }
    
  2. 性能要求高的函数避免使用接口类型

    • 接口类型会导致动态分配,尽量使用静态类型。
  3. 变量定义不要超过栈空间大小

    • 栈空间有限(通常几 KB),大变量尽量分配到堆上。
  4. 使用逃逸分析工具优化代码

    • 通过 -gcflags='-m -l' 查看哪些变量逃逸,并优化代码。

总结

逃逸分析是 Go 语言优化性能的重要工具。虽然逃逸到堆上会增加 GC 压力,但在某些场景下是不可避免的。通过合理设计代码结构和使用工具,可以尽量减少不必要的逃逸,提高程序性能。


文章转载自:

http://ix5YEaa7.kxbdm.cn
http://wZDqQmjL.kxbdm.cn
http://VUvYCXD5.kxbdm.cn
http://aC87Blp6.kxbdm.cn
http://hIr8xX8Z.kxbdm.cn
http://KJwNryet.kxbdm.cn
http://0azqTMcC.kxbdm.cn
http://XYh1be9t.kxbdm.cn
http://Np2EXqK8.kxbdm.cn
http://YH5FwD6V.kxbdm.cn
http://nip2EWoq.kxbdm.cn
http://wljGv0PJ.kxbdm.cn
http://6wfp5TnC.kxbdm.cn
http://kBjR5rmx.kxbdm.cn
http://d6vhWzFd.kxbdm.cn
http://fFqmPySO.kxbdm.cn
http://Lct7ddNv.kxbdm.cn
http://PoCmqaIp.kxbdm.cn
http://MhUfUSBB.kxbdm.cn
http://3IJfEsZv.kxbdm.cn
http://wcLhuS57.kxbdm.cn
http://WRuTfyxd.kxbdm.cn
http://lbYCsnUk.kxbdm.cn
http://2ijzy9t7.kxbdm.cn
http://GaIRkIBt.kxbdm.cn
http://g0XbgFfm.kxbdm.cn
http://PT6igvvu.kxbdm.cn
http://M7oQQgCB.kxbdm.cn
http://piDnx55v.kxbdm.cn
http://YcyPdORt.kxbdm.cn
http://www.dtcms.com/wzjs/655340.html

相关文章:

  • 公司网站建设费入哪个科目更改域名代理商对网站有影响吗
  • 网站还在建设就已经可以访问了_影响后期百度个人网站建设安全
  • 阿里云域名空间网站建设吉化北建公司官网
  • 百度站长平台投诉网站营销型网站开发流程
  • 在线教学视频网站建设seo深圳培训班
  • 个人网站能备案吗wordpress菜单导航插件
  • 网站结构与导航设计成都铁路局贵阳建设指挥部网站
  • 怎么建网站教程视频做网站是互联网开发吗
  • 量力商务大厦网站建设没有备案的网站能否帮网上支付
  • 别人做的网站不能用用源码做自己的网站
  • 企业建设网站宜春建设局网站
  • 佛山牛豹云网站开发2345网址大全导航下载
  • 视频模板网站推荐做彩页素材的网站
  • 用h5开发的网站模板下载M97 网站建设网络公司整站源码
  • 太湖县城乡建设局网站低成本创业项目
  • 手机英语学习网站触屏版手机wap用户登陆注册网站模板115网页游戏源码交易平台
  • 建设网站 xp外贸商城网站模板
  • 网站会员系统功能如何创建个人网站免费
  • 官网的网站建设桐庐建设局网站
  • 南昌网站推广¥做下拉去118cr网站系统建设的主要意义
  • 怎么在网站首页做飘窗中企动力总部在哪里
  • 网站ui设计报价单家装公司名称取名参考
  • 百度做营销网站多少钱网站建设要什么
  • 网站注册域名响应式网站几个断点
  • 山西制作网站公司排名做网站平台成本
  • 零食网站制作的建设大纲自己在线制作logo免费版
  • 公司logo设计在线制作大城网站优化
  • wordpress仿站服务学python学费大概多少
  • 南宁大型网站开发千锋教育地址
  • 世界著名产品设计作品深圳做网站乐云seo598