uri*_*ium 16 for-loop coding-style memory-optimization
有时候你知道你的循环永远不会超过x次,其中x可以用byte或short来表示,基本上是一个小于int的数据类型.
为什么我们使用占用32位(大多数语言)的int,就像一个字节就足够只有8位.
我知道我们有32位和64位进程,所以我们可以在一次旅行中轻松获取值,但它仍然消耗更多内存.或者我在这里缺少什么?
更新:只是为了澄清.我知道速度明智没有区别.我问的是对内存消耗的影响.
siu*_*nin 27
在C中,"int"被定义为当前机器的最有效整数类型.
它通常与CPU的寄存器匹配,这就是它最有效的方式.
使用较小类型的整数值可能会导致CPU级别的某些位移或位屏蔽,因此您无法获得增益...
访问与本机字大小相同的整数大小将是最有效的.使用一个字节几乎肯定需要与原生字大小一样多的空间,并且需要移位和屏蔽才能访问,因此没有什么可以获得的.
实际上,除非你有一个非常非常大的环路或严格的时序限制,否则它不会产生太大的影响.
但是一如既往,使用最具可读性的东西,首先使用基准/配置文件......
我几乎总是使用,int除非有充分的理由不这样做,因为每个人总是使用它.这是为了避免下一个开发人员不得不花时间思考他为什么不在int这里使用,是否有一些我需要了解的特殊原因.
我的代码越标准,将来就越容易阅读.
在许多情况下,循环计数器仅消耗一个处理器寄存器.将类型更改为8位或16位整数不会改变,因为寄存器具有固定大小(32位平台上的32位等).
有时,循环计数器可以放在RAM中,例如,当您从循环中调用函数时.然后,是的,你可能会浪费几个字节,但通常不足以担心.当使用与a不同的东西时,存储和加载循环计数器实际上可能会更慢int.