mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-08-05 23:21:51 +00:00
Fix error building with pandoc.
This commit is contained in:
@@ -14,18 +14,18 @@ Sizeof函数返回的大小只包括数据结构中固定的部分,例如字
|
||||
由于地址对齐这个因素,一个聚合类型(结构体或数组)的大小至少是所有字段或元素大小的总和,或者更大因为可能存在内存空洞。内存空洞是编译器自动添加的没有被使用的内存空间,用于保证后面每个字段或元素的地址相对于结构或数组的开始地址能够合理地对齐(译注:内存空洞可能会存在一些随机数据,可能会对用unsafe包直接操作内存的处理产生影响)。
|
||||
|
||||
|
||||
类型 | 大小
|
||||
----------------------------- | ----
|
||||
bool | 1个字节
|
||||
intN, uintN, floatN, complexN | N/8个字节(例如float64是8个字节)
|
||||
int, uint, uintptr | 1个机器字
|
||||
*T | 1个机器字
|
||||
string | 2个机器字(data,len)
|
||||
[]T | 3个机器字(data,len,cap)
|
||||
map | 1个机器字
|
||||
func | 1个机器字
|
||||
chan | 1个机器字
|
||||
interface | 2个机器字(type,value)
|
||||
类型 | 大小
|
||||
------------------------------- | -----------------------------
|
||||
`bool` | 1个字节
|
||||
`intN, uintN, floatN, complexN` | N/8个字节(例如float64是8个字节)
|
||||
`int, uint, uintptr` | 1个机器字
|
||||
`*T` | 1个机器字
|
||||
`string` | 2个机器字(data,len)
|
||||
`[]T` | 3个机器字(data,len,cap)
|
||||
`map` | 1个机器字
|
||||
`func` | 1个机器字
|
||||
`chan` | 1个机器字
|
||||
`interface` | 2个机器字(type,value)
|
||||
|
||||
Go语言的规范并没有要求一个字段的声明顺序和内存中的顺序是一致的,所以理论上一个编译器可以随意地重新排列每个字段的内存位置,虽然在写作本书的时候编译器还没有这么做。下面的三个结构体虽然有着相同的字段,但是第一种写法比另外的两个需要多50%的内存。
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# 第十三章 底层编程
|
||||
# 第十三章 底层编程
|
||||
|
||||
Go语言的设计包含了诸多安全策略,限制了可能导致程序运行出错的用法。编译时类型检查可以发现大多数类型不匹配的操作,例如两个字符串做减法的错误。字符串、map、slice和chan等所有的内置类型,都有严格的类型转换规则。
|
||||
|
||||
|
Reference in New Issue
Block a user