当前位置: 传客网 > GoLang 指针和内存分配

GoLang 指针和内存分配

2017-01-05 作者:sunny
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

  • Java---Java内存分配

    Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:&

  • Java中程序执行过程及内存分配情况

    Java中程序执行过程及内存分配情况:下面用一个程序例子来说明内存的分配,程序如下:注意:下面图中的堆和栈应该互换一下,本人在画图时搞反了!1.首先用new定义了一个对象test,(于用new来定义对象或变量)其内存分配情况如下:2.然后定

  • 嵌入式操作系统内核原理和开发(最快、最优、最差内存分配算法)

    前面我们说到了基于链表的内存分配算法。但是之前我们也说过,其实内存分配一般有三个原则,最快、最优和最差。最快比较好理解,就是寻找到合适的节点就立即分配内存,我们在前面一篇博客采用的就是这个方法。最优呢,就是寻找可以满足当前内存分配的最小节点

  • 堆和栈的区别 &内存分配

    堆:顺序随意栈:先进后出堆和栈的区别数据结构CC++C#Windows堆:顺序随意栈:先进后出堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数

  • java内存分配

    在网上收集了一些关于java内存分配的知识Java中的堆和栈简单的说:Java把内存划分成两种:一种是栈内存,一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈

  • Windows内存分配

    Windows内存分配(转)堆和栈的区别一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区

  • jvm 内存分配

    Java对象所占用的内存主要从堆上进行分配,堆是所有线程共享的,因此在堆上分配内存时需要进行加锁,这导致了创建对象开销比较大。当堆上空间不足时,会触发GC,如果GC后空间仍然不足,则抛出OutOfMemory错误信息。SunJDK为了提升内

  • 浅谈内存分配方式以及堆和栈的区别

    对于一个程序要运行,涉及到的内存分配是一个首要问题,这里简单说一下一个简单的程序运行所涉及到的内存分配方式。另外,在数据结构中存在堆和栈的概念,栈是一种先进后出的数据结构,堆则是一种排序方式,而在内存分配中也存在堆(heap)和栈(stac

返回
顶部