GoLang 指针和内存分配

go
Go语言中使用指针的代码:
  1. package main  
  2.   
  3.   
  4.   
  5. func main()  
  6.   
  7.   
  8.  &value  
  9.   
  10. %d  pInt %d  *pInt %d \n"value, pInt, *pInt)  
  11.   
  12.   
  13.     *pInt 222  
  14. %d  pInt %d  *pInt %d \n"value, pInt, *pInt)  
  15.   
  16.   
  17.  123  
  18.     pInt &m  
  19. %d  pInt %d  *pInt %d \n"value, pInt, *pInt)  
  20. }  

输出信息:
value = 1  pInt = 8725766688  *pInt = 1 
value = 222  pInt = 8725766688  *pInt = 222 
value = 222  pInt = 8725766784  *pInt = 123


2 Go语言中有两个分配内存的机制,分别是内建的函数newmake

Go语言中,new只是将内存清零,并没有初始化内存。所以在Go语言中,new(T)所做的工作是为T类型分配了值为零的内存空间并返回其地址,即返回*T。也就是说,new(T)返回一个指向新分配的类型T的零值指针
make(T, args)函数与new(T)函数的目的不同。make(T, args)仅用于创建切片、mapchannel(消息管道)make(T, args)返回类型T的一个被初始化了的实例。而newT)返回指向类型T的零值指针。也就是说new函数返回的是*T的未初始化零值指针,而make函数返回的是T的初始化了的实例
Go语言中出现newmake两个分配内存的函数,并且使用起来还有差异,主要原因是切片、mapchannel这三种类型在使用前必须初始化相关的数据结构。例如,切片是一个有三项内容的数据类型,包括指向数据的指针(在一个数组内部进行切片)、长度和容量,在这三项内容被初始化之前,切片值为nil。换句话说:对于切片、mapchannelmake(T, args)初始化了其内部的数据结构并为他们准备了将要使用的值

  1. package main  
  2.   
  3. import   
  4.   
  5. func main()  
  6.       
  7.       
  8.     var *[]  
  9.     fmt.Println(p)          
  10. fmt.Println(*p)          
  11.   
  12.       
  13.     var []10)  
  14.     fmt.Println(v)          
  15.  

相关推荐

  • 内存分配 指针和数组对比(on the internet) 内存分配方式在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率
  • 【C语言】动态分配内存、void指针、结构体指针(部分内容摘自《c程序设计》谭浩强) 程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、全局区(静态区)(static):全局变量和静态变量的存
  • Delphi和C的类比:指针、字符串、函数指针、内存分配等 在学习Delphi的时候,一个很好的建议是和C/C++去类比着学习,从指针,到内存管理,到数组,到面向对象……各个方面,都是有很多可以相似和或者也有不同的方,类比着学习,一方面加深对Delphi的理解,一方面加深对C/C++的理解,一方面加
  • 内存分配 分配内存的方式有两种:动态分配内存、静态分配内存动态分配内存与静态分配内存的区别:1)静态内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源;2)静态内存分配是在栈上分配的,
  • 深入Java核心 Java内存分配原理精讲  JAVA内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:
  • heap stack 堆栈 全局变量 静态变量 进程空间 内存分配 一、预备知识——程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,
  • Java程序员成长之路(Java核心之Java内存分配原理)【转】 JAVA内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:寄
  • Java内存分配原理(三)   JAVA内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域
  • 内存分配策略中的堆与栈 内存分配策略按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允
  • C语言内存分配 一、存储区的划分栈区堆区静态区常量区代码区内存地址由大到小栈区如inta=4;由系统自动开辟。栈存取FILOFirstinlastout1.栈内存:栈内存的内存分配方式,是有系统根据需要分配的变量的类型来自动根据类型大小分配可用的内存空间,
  • Java中的堆内存与栈内存分配浅析 Java把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放
  • 深入Java核心-Java内存分配原理精讲1 栈、堆、常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,详细讲解Java内存分配方面的知识。Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Ja

你的评论

就没有什么想说的吗?

最新博客

关于我们 移动版

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X