BBe*_*eta 12 c c++ int short char
考虑int占用内存中的4个字节.
理解我正在寻找的是这个例子:
for(x=0;x<10;x++)
//do something
在这个指令我知道x的值小于11,
我见过很多代码,大多数人都声明x像int一样,
为什么我们不应该或为什么大多数人不会宣称x像短片甚至像char!
我想是因为我找到了这个解释,例如:
short s=5;
s在内存中占用2个字节,而我所知道的是编译器认为5就像一个int 所以要把5放到s,5应该转换为short right !!
- >所以这条指令占用的内存更少,但工作更多
int i=5;
这里我需要4个字节,但不需要对话(5是一个int)
- >所以这条指令做的工作少,但需要更多的记忆
就像我想的那样!
我希望我的问题很明确
小智 16
如果你必须在内存中存储数百万个数字,每个数字可能在0到11之间,那么你就会关注内存.在循环中,变量很可能存储在CPU寄存器中,这意味着它在x86上为32位,在x86_64上为32到64位等.所有"较小"整数将零扩展为32或者64位.
int简单易读,很多人都使用它.但是,如果你必须担心性能或提示编译器有关大小约束,那么使用"(u)int_fast_*"类型(即uint_fast8_t.
你在考虑事物的表面外观太多了.现实与此不同.
例如,您担心循环变量占用的内存.但是,在许多循环中,循环变量永远不会存储在内存中.相反,它将被保存在寄存器中.CPU中寄存器的数量是有限的,但变量不能占用寄存器的一半(通常是 - x86有点奇怪),所以无论你使用int,short还是char,你都可能失去一个完整的寄存器.所以你不要通过使变量更小来保存任何东西.
类似的是你的假设,即将一个整数文字分配给一个short需要更多的工作而不是一个int.这里的问题是假设编译器会生成在运行时进行某种转换的代码,这时只需生成执行简单操作的代码(只是将文字存储到内存位置)就好了.
全部的最佳理由 - 可读性.如果我看到循环遍历a short或a char,我会花一点时间来弄清楚原因.一个int更直观,因为它是迭代最常用的类型(甚至更多使用它iterator或size_t).
有时通过选择小于的算术类型来微观优化内存使用是有意义的int.但这需要付出代价,因为正式地说,价值被提升为对其int进行算术运算,然后转换回较小的类型.int是目标平台的自然大小,因此使用它几乎总是更好,特别是因为每个未来的维护者都必须弄清楚为什么有人写了这样不自然的代码.
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |