在 Golang 中,对象的分配和存储是由运行时系统进行管理的。对象可以被分配在堆上或栈上,具体取决于对象的大小和生命周期。
- 堆上分配:
- 对象的分配在堆上发生时,可以使用
new
或make
关键字来创建。 new
关键字用于创建各种类型的对象,并返回一个指向分配对象的指针。make
关键字主要用于创建内置引用类型的对象,如切片、映射和通道。- 通过在堆上分配对象,可以在函数之间共享对象,并且对象的生命周期可以超出函数调用。
- 对象的分配在堆上发生时,可以使用
示例代码:
type Person struct { Name string Age int } func main() { // 在堆上分配一个 Person 对象,并返回指向该对象的指针 p := new(Person) p.Name = "Alice" p.Age = 25 fmt.Println(p) // 输出:&{Alice 25} }
- 栈上分配:
- 对于小型对象和局部变量,Golang 倾向于将其分配在栈上。
- 当函数调用结束时,栈上分配的对象会自动释放。
- 栈上分配的对象没有指向它们的指针,因此无法在函数之间共享。
示例代码:
func main() { // 在栈上分配一个局部变量 name := "Bob" age := 30 fmt.Println(name, age) // 输出:Bob 30 }
需要注意的是,不论对象是在堆上还是栈上分配,对开发者来说都是透明的,无需手动操作。Golang 的运行时系统会根据对象的大小和生命周期进行自动选择。
总结起来,Golang 的对象可以在堆上或栈上分配,具体取决于对象的大小和生命周期。使用 new
和 make
可以在堆上分配对象,并返回指向对象的指针。而小型对象和局部变量通常会在栈上分配。开发者无需直接操作对象的堆栈,而是依靠运行时系统自动管理。
堆栈
https://blog.haohtml.com/archives/21544
https://github.com/luozhiyun993/luozhiyun-SourceLearn/blob/master/golang/12.Go语言中栈内存.md
https://www.dingmos.com/index.php/archives/117/
https://mail.gnu.org/archive/html/qemu-devel/2020-09/msg08481.html
https://zhangguanzhang.github.io/2020/06/25/kubernetes-pprof/#/kubectl-收集
gdb调试
https://swjtulwy.github.io/gdb/
https://zhuanlan.zhihu.com/p/661430797
https://www.shishao.site/gdb-udhvn
内存分析
https://chunhui01.github.io/2020/03/17/记一次Linux下Nginx内存泄露定位/
https://www.hitzhangjie.pro/blog/2021-04-14-https://www.hitzhangjie.pro/blog/2021-04-14-go程序内存泄露问题快速定位/
https://ivanzz1001.github.io/records/post/linux/2018/04/06/linux-gdbdump
kdump
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/kernel_administration_guide/chap-analyzing-a-core-dump
进程内存一览详情
https://time.geekbang.org/column/article/283787
https://github.com/ColZer/DigAndBuried/blob/master/system/memory.md
perf分析
https://www.cnblogs.com/feipeng8848/p/17777188.html
https://cloud.tencent.com/developer/article/1809595
分析内存
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/profiling-memory-accesses-with-perf-mem_monitoring-and-managing-system-status-and-performance
内存碎片处理
https://www.alibabacloud.com/help/zh/alinux/support/solutions-to-memory-fragmentation-in-linux-operating-systems?spm=a2c63.p38356.0.0.1d706ec9VeCn5F
内存页不可回收
https://www.alibabacloud.com/help/zh/alinux/support/identify-the-causes-of-high-percentage-of-the-slab-unreclaimable-memory?spm=a2c63.p38356.0.0.62da7920QJwwfb
标签:分析,www,对象,性能,内存,https,堆栈,com,分配 From: https://www.cnblogs.com/tiantao36/p/18209131