前文
话说今天在用uintptr进行指针运算的时候,突然想起来有个内存对齐的东西,那么对这个uintptr计算是否会有影响?
带着疑问,开始吧。
你将获得以下知识点:
1.什么是内存对齐?
2.为什么需要内存对齐?
3.如何进行内存对齐?
4.golang的内存对齐如何体现?
5.如何利用内存对齐来优化golang?
正文
1.什么是内存对齐?
在想象中内存应该是一个一个独立的字节组成的。像这样:
事实上,人家是这样的:
内存是按照成员的声明顺序,依次分配内存,第一个成员偏移量是0,其余每个成员的偏移量为指定数的整数倍数(图中是4)。像这样进行内存的分配叫做内存对齐。
2.为什么需要内存对齐?
原因有两点:
平台原因
并不是所有的硬件平台都能访问任意地址上的任意数据,会直接报错的!
(解释:比如说有的cpu读取4个字节数据,要是没有内存对齐,从1开始那么内存就需要把0-7字节的全部取出来&#