和有些语言不同,Go中的new 不是直接分配在栈或堆上,而是取决于内存逃逸。 Go语言中的new不一定总是在堆上分配内存,实际分配由编译器决定,基于变量是否逃逸作用域,也就是取决于内存逃逸。内存逃逸则在堆上,否则在栈上。 Go判断内存逃逸 可以通过如下命令, 查看是否逃逸, gobuild-gcflags="-m"main.go 典型的...
int* pn=new int;// new与delete搭配使用 1. 这种写法:pn为栈上的一个指针,指向堆上所对应的内存块。 int num; int* pt=# 1. 2. 这种写法:指针pt以及变量num都在栈上。 2、何时用堆、何时用栈 一般情况下,自带数据类型int、容器等都声明在栈上(因为这些数据类型所占用内存大小是确定的,且较小)。在...
1栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等 2堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用 new 申请的堆内容。 为了方便理解,举个例子: 如: int [ ] x; //定义了一个数组x,这条语句执行完成后的内存状态如图1 x = new int [10]; //数组初始化...
你需要关注的不是数组,是new,new出来的是在堆上,就是在堆上申请了结构体大小的内存