Go内存模型指定了一个goroutine中变量的读取条件,可以保证观察不同goroutine中对同一变量的写入产生的值。
虚拟内存#
虚拟内存技术是操作系统实现的一种高效的物理内存管理方式

- 虚拟内存通过页表映射到物理内存上,页表记录是否在物理内存上(有效位),以及物理内存页的地址
- 操作系统为每个进程提供了一个独立的页表,因此也就是一个独立的虚拟空间地址,多个虚拟页面可以映射到同一个共享物理页面上。
- 地址翻译:一个N元素的虚拟地址空间的元素和一个M元素的物理地址空间中元素之间的映射
- 虚拟内存:利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间
- 操作系统内存管理中,一个重要概念虚拟内存:
- 扩大地址空间
- 内存保护
- 公平内存分配
- 当进程通信时,可采用虚存共享的方式实现
- 不需要在实际物理内存的连续空间,**可以利用碎片
- 虚拟内存的代价:
- 管理需要建立很多数据结构,占用额外的内存
- 虚拟地址到物理地址的转换,增加了指令的执行时间
- 页面的换入换出需要磁盘I/O
- 一页中只有部分数据,会浪费内存
Go内存模型#
参考tcmalloc设计,「修改由多个goroutine同时访问的数据的程序必须序列化这种访问。 要序列化访问,请使用channel操作或其他同步原语(sync和sync/atomic)保护数据。 别自作聪明。」