Lau*_*nce 10 int performance types go
据我所知,int并uint为64位有符号/无符号整数-就像int64/ uint64.而且我也明白这int不仅仅是int64(比如byte- > uint8is)的别名,所以在适用时int64需要转换为int反之亦然.但是使用一个比另一个有什么好处?使用常规类型是否有任何运行时性能损失?
对不起,如果这是一个常见的问题 - 我已经用Google搜索了答案(并在这里也进行了搜索),因为我以为其他人可能已经出现过但没有找到任何人回答这个问题对他们如何影响表现(如果有的话),内存使用(我猜不是,如果它们都是64位整数?),也不是编译器如何处理它们.
编辑:我知道int/ unit32位架构是32位.为了简洁和比较喜欢,我假设这是一个64位的Golang环境.
Lil*_*ard 17
int并且uint在64位体系结构上只有64位.在32位架构上,它们是32位.
一般的答案是,除非您需要一定的精度,否则坚持使用与当前体系结构中的字大小相同的数据类型(例如,32位体系结构上的32位)通常会稍微高效一些.
小智 7
int并且uint对应于Go实现和运行时中基本Go数据结构的最大可能长度.的长度string,map[K]T,[]T和chan T总适合成int,和的容量[]T和chan T总适合成int.
分配via make必然会返回一个长度和容量始终适合的对象int.内置函数append返回一个长度和容量永远不会超过的切片int.插入新键值对后,映射的长度(已定义键的数量)总是适合于int.
主要的好处是int并且uint是最小的(就位数而言)数据类型,这些数据类型在Go程序中可以安全地与常见的Go数据类型(例如切片和映射)一起使用.
大小int独立于指针的大小*T.对应的整数类型*T是uintptr.从理论上讲,Go实现可以选择映射int到int16- 许多Go程序仍然可以正常工作,但是将分配大小限制为15位可能限制太多,并且会导致运行时出现混乱.
在64位体系结构转到1.0有int和uint32位长,长转到1.1 64位(见转到1.1版本说明).此更改将增加64位体系结构上某些Go程序的内存使用量..
在Go 1.0和32位体系结构中明确使用int64而不是intGo程序可以使它变慢,因为:
之间的转换int和int64
某些CPU指令(如除法)的性能取决于操作数的大小
在Go程序中明确使用int64而不是int在64位体系结构的Go 1.0下更快,因为:
uint16在访问时使用作为索引[1<<16]T允许编译器删除绑定的检查指令.