p1是结构体,p2是结构体指针. 2. 声明并赋值结构体和结构体指针 package main import "fmt" type Person struct { name string age int } func main() { // 初始化结构体(创建一个结构体对象) p1 := Person{"张三", 18} fmt.Println(p1.name, p1.age) // 初始化结构体指针 p2 := &Person{"李四"…
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 内存管理对所有程序都很重要,主要包括显式内存管理和隐式内存管理.其中隐式内存管理主要是自动变量分配内存,变量主要分配在函数的栈帧上.若是静态变量或全局变量,主要分配在程序的数据段,能够被自动分配数值.显式内存分配可以更加灵活高效的管理内存,可以有效避免空间浪费.C语言支持动态内存管理,对象从堆上分配内存,使用内存分配函数和内存释放函数实现内存的动态管理. 一.内存分配流程:缺少任何环节都有可能…
malloc/free和new/delete的区别 malloc/free是C/C++标准库的函数:new/delete是C++操作符. malloc/free只是动态分配内存空间/释放空间:new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理资源. malloc/free需要手动计算类型大小且返回值类型为void*:new/delete可自动计算类型的大小,返回对应类型的指针. malloc/free管理内存失败会返回0:new/delete等的方式管理内存失败会抛出异常…
使用sqlserver和IIS开发.net B/S程序时,数据量逐渐增多,用户也逐渐增多,那么服务器的稳定性就需要维护了.数据库如何占用更小内存,无用的日志如何瞬间清空? 今天在给一个客户维护网站的时候,发现运行了2年的程序,数据库中主表的数据已超过70万条,按理说这样的数据量根本不算多.数据库是Sqlserver2012版本,服务器是Windows Server 2008. 在远程连接过程中,IIS和sqlserver总是打开一会儿自动闪退,打开任务管理器,发现IIS进程占用几百MB内存,数据…
package main import ( "fmt" "reflect" ) type resume struct { // 反射解析结构体标签tag Name string `info:"name" doc:"我的名字"` Sex string `info:"sex"` } // 方法一:传递结构体对象 func findTag(stru interface{}) { t := reflect.Type…
iphoneuinavigationcontrollercocoauiviewvariableswindows 在使用nib文件做界面开发的过程中,加载nib文件后,由于设置了outlet和delegate,出现了一些未能及时释放的引用和retain循环,最后结果当然可想而知,dealloc没有走到,内存一路高歌走上去了. 所以在使用的时候应该需要注意一些地方,及时的释放不必要的引用等 官方文档Memory Management Programming Guide中 Memory Managem…
golang 的 nil 在概念上和其它语言的 null.None.nil.NULL一样,都指代零值或空值.nil 是预先说明的标识符,也即通常意义上的关键字.在 golang 中,nil 只能赋值给 指针.channel.func.interface.map 或 slice 类型的变量.如果未遵循这个规则,则会引发 panic.对此官方有明确的说明:http://pkg.golang.org/pkg/builtin/#Type golang 中的 interface 类似于 java 的 in…
C#高级编程9 内存管理和指针 后台内存管理 1) 值数据类型 在处理器的虚拟内存中有一个区域,称为栈,栈存储变量的浅副本数据,通过进入变量的作用域划分区域,通过离开变量的作用域释放. 栈的指针指向栈保留的内存块的末尾,栈是向下填充的,比如说内存是4g,,那么就从4g开始直至占用0g,每一个区域的划分都由下一个空闲存储单元. 2) 引用数据类型 变量的生存期是互相嵌套的,一般情况下变量的生存期在一个方法中定义会在一个方法外结束,不过有时候需要在方法外数据仍是可用的,这时候需要用到引用类型. 引用…
干货之前:补充一下可选链(optional chain) class A { var p: B? } class B { var p: C? } class C { func cm() -> String { print("cm") return "abc" } } let insa = A() let insb = B() let insc = C() insa.p = insb //insa.p = nil insb.p = insc let r = in…
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6.go语言中没有class类型,只有struct类型 struct声明: type  标识符 struct{ field1 type field2 type } 例子: type Student struct{ Name string Age  int Score int } struct中字段访问,…