【发布时间】:2010-11-17 13:32:43
【问题描述】:
很多时候你知道你的循环永远不会运行超过 x 次,其中 x 可以用字节或短字节表示,基本上是小于 int 的数据类型。
为什么我们使用占用 32 位的 int(大多数语言),而像字节这样的东西只有 8 位就足够了。
我知道我们有 32 位和 64 位进程,因此我们可以轻松地在一次行程中获取值,但它仍然会消耗更多内存。或者我在这里错过了什么?
更新: 只是为了澄清。我知道速度方面没有区别。我问的是对内存消耗的影响。
【问题讨论】:
-
真的吗?我见过的大多数代码都使用某种形式的无符号类型。
-
@Billy ONeal:在某些嵌入式微控制器上,无符号类型可能比有符号类型提供更好的性能,但代价是需要更加小心循环终止逻辑。另一方面,如果像 ARM 这样的处理器在 32 位寄存器中存储类似 uint16 的东西,它必须添加额外的代码来将值“裁剪”为 16 位。 int16 不需要这样的代码(因为当 int16 被分配一个超出 -32768..32767 范围的值时允许发生任何事情,编译器可以让它的值做任何方便的事情)。
-
你是否创建了足够多的循环计数器来改变它们的类型对内存消耗有可见的影响?如果是这样,那么我认为您遇到的问题不仅仅是使用超出必要的类型。
-
@supercat:我并不是说 unsigned 更好——它们在大多数机器上都会产生相同的效果。但是,在我知道的大多数语言中,任何标准类型的容器都将大小或长度作为无符号类型返回,并且尝试在此类循环中使用
int会导致编译器警告。 (因为比较中的有符号/无符号不匹配) -
@John Bode。一点都不。我只是想要一些教育。我时不时地质疑我们为什么要这样做。
标签: for-loop coding-style memory-optimization