我应该在固定类型大小的langs中使用'long'代替'int'而不是'int'(如Java,C#)

Ale*_*hov 11 c# java d 32bit-64bit

在10年甚至5年内,将没有[ Edit2:服务器或桌面] 32位CPU.

那么,使用int(32位)long(64位)有什么优势吗?
使用中有什么缺点int吗?


编辑:

  1. 通过10 or 5 years我的意思是在绝大多数地方,这些LANGS使用

  2. 我的意思是默认使用哪种类型.这一天,我甚至都不愿意考虑是否应该使用short循环计数器for(int i....long计数器已经赢了同样的方式

  3. 寄存器已经是64位,32位类型已经没有增益.我认为8位类型有一些损失(你必须使用更多位然后你正在使用)

vcs*_*nes 12

32位仍然是完全有效的数据类型; 就像我们还有16位和字节一样.当我们转向32位处理器时,我们没有丢弃16位或8位数字.就存储而言,32位数字是64位整数的一半.如果我在建模数据库,我知道它的值不能高于32位整数可以存储的值; 我会使用32位整数进行存储.我也用16位数字做同样的事情.64位数字也会占用更多内存空间; 尽管今天个人笔记本电脑没有任何重要意义,但它可以配备8 GB的内存.

除了较小的数据类型之外,int没有缺点.这就像问:"我应该把糖储存在哪里?在糖碗里,还是一个筒仓里?" 嗯,这完全取决于你有多少糖.

处理器架构不应与您使用的大小数据类型有很大关系.使用什么适合.当我们有512位处理器时,我们仍然会有字节.

编辑:

解决一些评论/编辑..

  1. 我不确定"没有32位台式机CPU".ARM目前是32位; 并宣称对64位没什么兴趣 ; 目前.这与你的描述中的"桌面"不太合适; 但我也认为,在5到10年内,我们编写软件的设备类型的格局也将发生巨大变化.平板电脑不容忽视; 考虑到微软正式将Windows 8移植到ARM,人们会希望在它们上运行C#和Java应用程序.

  2. 如果你想开始使用long; 前进.没有理由不这样做.如果我们只关注CPU(忽略存储大小),并假设我们在x86-64架构上,那么它没有太大的区别.

  3. 假设我们坚持使用x86架构; 那也是如此.你可能最终得到一个稍大的堆栈; 取决于您使用的任何框架.


Jon*_*vis 5

如果您使用的是64位处理器,并且已经编译了64位代码,那么至少在某些时候,long它可能会更高效,因为它与寄存器大小相匹配.但这是否会真正影响你的计划是有争议的.此外,如果你long在整个地方使用,你通常会在堆栈和堆上使用更多的内存 - 这可能会对性能产生负面影响.有太多的变量可以确定您的程序long在默认情况下的执行情况,而不是int.有理由说它可能更快,以及为什么它可能会变慢.这可能是彻底清洗.

典型的做法是只使用int你不关心整数的大小.如果您需要64位整数,那么您可以使用long.如果你试图使用更少的内存并且int远远超过你的需要,那么你使用byteshort.

x86_64 CPU将被设计为在处理32位程序时高效,因此使用不会int严重降低性能.当你在64位CPU上使用64位整数时,由于更好的对齐,有些东西更快,但是由于内存需求增加,其他东西会变慢.并且可能存在各种其他因素,这些因素肯定会影响任一方向的表现.

如果您真的想知道在特定环境中哪个特定应用程序会做得更好,那么您将需要对其进行分析.这不是一个明显优于一个的情况.

就个人而言,我建议int您在不关心整数大小时使用典型的使用路径,并在使用时使用其他类型.