golang 内存分配

Posted by 夏泽民

1 变量的生命周期     生命周期是指程序执行过程中变量存在的时间段。下面我们分别来看看包变量(全局变量)和局部变量两种变量的生命周期。   ① 包变量一直常驻在内存到程序的结束,然后被系统垃圾回收器回收。也就是说包变量的生命周期是整个程序的执行时间。   ② 局部变量,例如一个函数中定义的变量。它有一个动态的生命周期:每次执行生命语句时创建一个新的实体,变量一直生存到它变得不可访问(例如没有外部指针指向它,函数退出我们没有路径能访问到这个变量),这时它占用的存储空间就会被回收。   所以我们有结论:   并不是定义在函数内部的局部变量在访问退出函数后就会被回收! 2 堆与栈的分配   学过其他诸如C/C++语言的都知道,变量定义完成一般是分配在堆和栈空间上的。存在哪个空间上是跟你是否动态分配内存有关(new/malloc)。但是在Go语言上这个选择并不是基于使用var和new关键字来声明变量的。   我们看下面两个程序实例:



Server Name Indication

Posted by 夏泽民

SNI (Server Name Indication)是用来改善服务器与客户端 SSL (Secure Socket Layer)和 TLS (Transport Layer Security) 的一个扩展。主要解决一台服务器只能使用一个证书(一个域名)的缺点,随着服务器对虚拟主机的支持,一个服务器上可以为多个域名提供服务,因此SNI必须得到支持才能满足需求。



golang nil 总结

Posted by 夏泽民

1.”“用法 使用”“判断string变量是否为空。 2.nil用法 使用nil判断结构体的指针是否为空。 3.len(s)用法 用于求数组、切片和字典的长度。



checkstyle

Posted by 夏泽民

现在很多开源工具都可以对代码进行规范审核,比较流行的有以下几款,大致给个简单介绍。



timer

Posted by 夏泽民

内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <linux/timer.h> 和 kernel/timer.c 文件中。 被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则: 1) 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。 2) 不能执行休眠(或可能引起休眠的函数)和调度。 3) 任何被访问的数据结构都应该针对并发访问进行保护,以防止竞争条件。 内核定时器的调度函数运行过一次后就不会再被运行了(相当于自动注销),但可以通过在被调度的函数中重新调度自己来周期运行。 在SMP系统中,调度函数总是在注册它的同一CPU上运行,以尽可能获得缓存的局域性。 struct timer_list {



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required