golang学习之指针、内存分配

 1 func pointer_test() {
 2     //空指针,输出为nil
 3     var p *int
 4     fmt.Printf("p: %v\n", p)
 5     //指向局部变量,变量值初始为0
 6     var i int
 7     p = &i
 8     fmt.Printf("p: %v,%v\n", p, *p)
 9     //通过指针修改变量数值
10     *p = 8
11     fmt.Printf("p: %v,%v\n", p, *p)
12     //数组的初始化及输出
13     m := [3]int{3, 4, 5}
14     fmt.Printf("m:%v--%v,%v,%v\n", m, m[0], m[1], m[2])
15     //指针数组的初始化及输出
16     //j, k, l := 3, 4, 5
17     //x := [3]*int{&j, &k, &l}
18     x := [3]*int{&m[0], &m[1], &m[2]}
19     fmt.Printf("x:%v,%v,%v\n", x[0], x[1], x[2])
20     fmt.Printf("*x:%v,%v,%v\n", *x[0], *x[1], *x[2])
21
22     var n [3]*int
23     n = x
24     fmt.Printf("n:%v,%v,%v\n", n[0], n[1], n[2])
25     //指向数组的指针,也即二级指针的使用
26     y := []*[3]*int{&x}
27     fmt.Printf("y:%v,%v\n", y, y[0])
28     fmt.Printf("*y[0]:%v\n", *y[0])
29     fmt.Printf("*y[][]:%v,%v,%v\n", *y[0][0], *y[0][1], *y[0][2])
30     /*
31         *X            ->    v
32         [3]X        ->    [v0][v1][v2]
33         []X            ->    [v0]...[vi]
34         [3]*X        ->    [p0][p1][p2]
35                           |   |   |
36                           j   k   l
37         []*[3]*X    ->    [n0]...[ni]
38                           | ... |
39                          [p0]->j
40                          [p1]->k
41                          [p2]->l
42     */
43 }
44
45 type Student struct {
46     name  string
47     id    int
48     score uint
49 }
50
51 func memery_test() {
52     //new分配出来的数据是指针形式
53     p := new(Student)
54     p.name = "China"
55     p.id = 63333
56     p.score = 99
57     fmt.Println(*p)
58     //var定义的变量是数值形式
59     var st Student
60     st.name = "Chinese"
61     st.id = 666333
62     st.score = 100
63     fmt.Println(st)
64     //make分配slice、map和channel的空间,并且返回的不是指针
65     var ptr *[]Student
66     fmt.Println(ptr)     //ptr == nil
67     ptr = new([]Student) //指向一个空的slice
68     fmt.Println(ptr)
69     *ptr = make([]Student, 3, 100)
70     fmt.Println(ptr)
71     stu := []Student{{"China", 3333, 66}, {"Chinese", 4444, 77}, {"Chince", 5555, 88}}
72     fmt.Println(stu)
73 }
时间: 2024-10-09 13:51:00

golang学习之指针、内存分配的相关文章

java学习-----jvm的内存分配及运行机制

VM运行时数据区域: 根据<Java虚拟机规范(第二版)>的规定,JVM包括下列几个运行时区域: 我们思考几个问题: 1.jVM是怎么运行的? 2.JVM运行时内存是怎么分配的? 3.我们写的java代码(类,对象,方法,常量,变量等等)最终存放在哪个区? VM运行时数据区域: 1.程序计数器(program Counter Register):   是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的

【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. 数组与指针 #include<stdio.h> #include<stdlib.h> void main1() { int a[10]

C语言学习笔记--动态内存分配

1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确定的 (3)但是程序运行的过程中,可能需要使用一些额外的内存空间 2. malloc 和 free 函数 (1)malloc 和 free 用于执行动态内存分配的释放 (2)malloc 所分配的是一块连续的内存 (3)malloc 以字节为单位,并且返回值不带任何的类型信息:void* mallo

memcached学习——memcached的内存分配机制Slab Allocation、内存使用机制LRU、常用监控记录(四)

内存分配机制Slab Allocation 本文参考博客:https://my.oschina.net/bieber/blog/505458 Memcached的内存分配是以slabs为单位的,会根据初始chunk大小.增长因子.存储数据的大小实际划分出多个不同的slabs class,slab class中包含若干个等大小的trunk和一个固定48byte的item信息.trunk是按页存储的,每一页成为一个page(默认1M). 1.slabs.slab class.page三者关系: sl

C学习笔记——malloc内存分配

鉴于上次领导告诉一个解决方案,让我把它写成文档,结果自己脑子里知道如何操作和解决,但就是不知道如何用语言文字把它给描述出来.决定以后多写一些笔记和微博来锻炼自己的文字功底和培养逻辑思维,不然只会是一个敲代码的,永远到不了管理的层面. 把<C程序设计语言>细读了一遍后,到第8章UNIX系统接口的最后两节--"目录列表"和"存储分配程序",看了一遍都没看懂.智商不过高啊.把存储分配重新看了一遍,才有了眉头.这两天还要找时间把目录列表再看一遍,确保掌握.(前几

二级指针内存分配

int b[2]={2,3};      int c[2]={4,5};        int **p,**q,**m;      q=new int*[2];      q[0]=new int;      q[1]=new int;      **q=c[0];      *(*q+1)=c[1];      delete q[0];      delete q[1];      delete []q;        q=(int**)malloc(sizeof(int*)*2);     

深入理解JVM之JVM内存区域与内存分配

深入理解JVM之JVM内存区域与内存分配 在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs.com/hellocsl/p/3969768.html?utm_source=tuicool&utm_medium=referral 看了此博客后,发现应该去深入学习下jvm的内存模型,就是去认真学习下<深入理解Java虚拟机>,其内容可能会<

C++ 动态内存分配(6种情况,好几个例子)

1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间.这种内存分配称为静态存储分配: 有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分

Java GC 机制与内存分配策略

收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现 自动内存管理解决的是:给对象分配内存 以及 回收分配给对象的内存 为什么我们要了解学习 GC 与内存分配呢? 在 JVM 自动内存管理机制的帮助下,不再需要为每一个new操作写配对的delete/free代码.但出现内存泄漏和溢出的问题时,如果不了解虚拟机是怎样使用内存的,那么排查错误将是一项非常艰难的工作. GC(垃圾收集器)在对堆进行回收前,会先确定哪些对象"存活",哪些已经"死去".那么就有了对象存活