首页 > 其他分享 >每日小记2023.9.1

每日小记2023.9.1

时间:2023-09-01 18:22:54浏览次数:35  
标签:加锁 变量 每日 编译器 逃逸 内存 2023.9 分配 小记

内存管理对堆而言的,程序在运行时主动从堆上申请内存,这些内存通过go的内存分配器分配,由垃圾回收器回收。
栈是每个goroutine独有的,不需要在操作的时候加锁,而堆上的内存有时需要加锁防止多线程冲突。对程序上的内存回收需要通过标记清除阶段,比如采用三色标记法。对栈而言,他的分配和释放是十分廉价的,借助栈相关寄存器完成,两个命令即可:分配入栈和栈内释放。

逃逸分析:哪些东西分配到堆栈上呢?GO编译器尽可能将变量分配到栈上,当编译器无法证明函数返回后,该变量没有被引用,编译器就必须在堆上分配该变量,如果局部变量非常大,会分配到堆上。
基本思想:检查变量的生命周期是否是可知的,通过检查在栈上分配,否则就是逃逸,必须分配到堆上。
注意:逃逸分析是在编译器完成的;如果变量在函数外部没有引用,优先放在栈中;如果变量在函数外部存在引用,则必定放在堆中。
了解逃逸分析可以帮我们更好的写程序。我们应该尽量写出分配到栈上的代码,堆上的代码变少,减少内存分配的开销,减少gc压力,提高程序运行速度。
比如go项目中,在传参时没有传结构体指针,直接传递结构体,通过值拷贝的方式,但是操作在栈中操作,开销比逃逸后的开销小得多。

标签:加锁,变量,每日,编译器,逃逸,内存,2023.9,分配,小记
From: https://www.cnblogs.com/ybex/p/17672630.html

相关文章

  • AI辅助编程测试2023.9.1
    今天考虑做一个需求WinForm程序中,将DevExpress中的SpreadsheetControl控件的[Ctrl+S]快捷键禁掉,避免用户自行将程序中提供的表格进行另存。我将下面这句话拿给各个AI工具,以及搜索工具关键词:DevExpress的SpreadsheetControl控件,如何能禁用ctrl+S这个快捷键  POE中的chatGPT3......
  • 每日一库:pprof简介
    pprof简介pprof是Go语言的一个性能分析库,它可以帮助开发者找出程序中的性能瓶颈。pprof提供了CPU分析、内存分析、阻塞分析等多种性能分析功能。以下是pprof的主要特性:CPU分析:pprof可以记录程序在CPU上的运行时间,并将这些数据以火焰图的形式展示出来。这可以帮助开发者找出程......
  • RISCV-MINI cache小记
    该cache映射策略为直接映射,采用写回(writeback)方式。需要注意的细节在于cpu-cache通过mask信号判断访存是读还是写,显然mask全0时为读。下图FSM中省略了dirty会影响状态转移,比如WriteCache到WriteBack,当cache块为dirty时才会触发aw.fire(io.nasti.aw.valid:=is_dirty)。简单解释:......
  • 每日一练 | 华为认证真题练习Day104
    1、下面关于免费ARP报文的作用描述错误的是()。A.在VRRP备份组中用来通告主备发生变换B.用于通告一个新的现AC地址:发送方更换网卡,AC地址发生改变,为了能够在AP表项老化前通告所有主机,发送方可以发送一个免费ARPC.用于检查重复的IP地址:正常情况下不会收到ARP回应,如果收到,则表明本网......
  • 【Python-每日技巧】格式化输出的区别
    在Python中,字符串可以使用单引号(')或双引号(")括起来。如果字符串本身包含引号字符,你可以在字符串中使用反斜杠(\)进行转义。对于字符串中的美元符号($),它是一个普通的字符,不需要进行特殊处理。你可以直接在字符串中使用美元符号,如下所示:my_string="Thisisastringwitha$symbol."......
  • Acwing. 秋季每日一题
    Acwing.秋季每日一题活动链接A重复局面.国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。国际象棋每一个局面可以用大小为8×8的字符数组来表示,其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母k、q、r、b、n、p......
  • 网络流小记
    从洛谷搬过来并做了些许润色,后面或许还会增加内容(?第一次学的时候似乎忘记写博客了捏网络流全称网络流理论,是把量类比水流的一种模型。最大流基本芝士对于最大流问题,有一种经典的不能在经典的情景:有一个能生产无限水的自来水厂,若干能承载无线水的节点和家三中节点,点与点之间有......
  • Django学习小记[3] —— Query
    今天学习的是Django的ModelQuery,前一篇已经学习过Model了,讲述的主要是Django中是如何处理关系型数据的模型的,一对一,多对一,多对多等,这篇则主要是描述的查询,能够将数据存进去,还得取出来,Django给每一个Model自动提供了丰富的查询接口,而且能够进行关联查询,基本上,能够满足绝大多数的查......
  • Django学习小记[6]——Class-based View
    这节我们讲一下Class-basedView,为什么要有这个Class-basedView呢?view不都是一个方法吗?跟类有啥关系?其实答案很明显,用类其实是为了抽象,抽象出通用的,将可变的暴露出来,这样我们就可以用最少的代码实现复杂的功能了。Django中,对那些我们平时经常用的View进行了封装,比如用于渲染一......
  • Django学习小记[4]——URL Dispatcher
    URLdispatcher简单点理解就是根据URL,将请求分发到相应的方法中去处理,它是对URL和View的一个映射,它的实现其实也很简单,就是一个正则匹配的过程,事先定义好正则表达式和该正则表达式对应的view方法,如果请求的URL符合这个正则表达式,那么就分发这个请求到这个view方法中。有了这个bas......