为什么要内存对齐
总线读取总是32位的倍数读取的,对齐算法有助于提升程序的运行效率,大部分的语言都在底层实现了这部分的支持,只是实现有所不同。
golang的对齐和c#的对齐
两者比较不太公平,毕竟csharp要先转一次IL。他们的底层数据类型为了内存对齐都会采用padding的方式,但是又有不同,比如bool类型,csharp中是4个字节,而golang是一个字节。理论上bool只需要一个bit来表示true和false,但是对齐理论告诉我们你起码得是一个字节为最小的单位,所以八个bool也是一个字节的大小,然后这里csharp居然占用了4个字节,查找不少资料,给了很多理由和借口,总之csharp的哲学就是保证底层运行的可靠和原子性。所以在csharp中用uint16反倒比bool省空间。