首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >了解所需变量类型的范围

了解所需变量类型的范围
EN

Software Engineering用户
提问于 2014-08-06 17:50:35
回答 3查看 167关注 0票数 2

因此,如果我(作为程序员)知道我的值永远不会超过一个小数字(比如100),因为它实际上只是一个反控制的循环或其他什么,那么我可以使用shortchar来代替int来节省内存吗?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2014-08-06 18:10:56

你可以,这很有可能奏效。正如FrustratedWithFormsDesigner所提到的,您需要确保边界检查。

另一个重要因素是,正如德尔南所说,寄存器的大小是固定的。但是,如果变量的大小不是计算机的字大小,那么将它们作为一种较小的类型使用可能意味着使用不同的、效率较低的指令。

大多数情况下,使用比机器的字大小更小的可变大小并没有什么好处。嵌入式系统可能会受益,如果文件格式指定了特定的字段大小,那么当然要使用这些字段。要记住的另一件事是内存对齐,16位变量可能在32或64位内存边界上对齐,变量之间没有使用空间。也可能不会。也可能是编译器标志。

编辑:评论提出了一个很好的观点。即使使用64位字大小,int仍然可能是32位(C/C++,桌面平台)。原因是历史的和背景的。然而,现代64位CPU,如英特尔核心i7,是严重优化32和64位算术。当使用与其本机字大小相同的ints时,任何CPU都应该是快速的。然而,有很多32位软件,这些CPU需要能够运行和运行良好。使用小于32位的ints可能会或可能会影响性能,因为您现在已经超出了CPU优化的范围。实际上,我认为任何性能的影响都是最小的,内存差异也是可以忽略不计的。在“过早优化”下存档。

票数 7
EN

Software Engineering用户

发布于 2014-08-06 17:53:37

我想你可以。当然,如果这样做,还应该包括验证变量的代码,以便如果输入大于100,则会得到合理的错误消息。添加注释来解释为什么要使用char而不是int也是一个好主意(如果这就是您最终要做的事情)。这可能并不是每个人都明白的。您是否工作在一个内存非常紧的环境中,这将对您的程序产生重大影响?你这么做是出于教育目的吗?

票数 2
EN

Software Engineering用户

发布于 2014-08-06 18:20:44

是的,这在循环中特别有用。人们通常只是使用int,或者允许var来确定变量类型应该是什么。这是低效的(但不是很糟糕),但对于像我这样的人,谁喜欢得到每一盎司的表现,只是因为使用最完美的数据类型的情况下,这是非常棒的。

代码语言:javascript
运行
复制
for(SByte i = 0; i <= 10; i++)
{
...code
}

SByte允许-128到127。我喜欢这种小数据类型,因为它节省了内存,并且是最适合在需要的情况下使用的数据类型。

然而,在某些语言中,整数是算术操作中速度最快的数据类型,即使它可以满足您的需要。

与其他数据类型相比,整数类型的算术运算速度更快。使用Visual中的Integer和UInteger类型,它们是最快的。1 (msdn.com)

所以在循环中,是的,用这个。然而,在做算术时,要谨慎行事,并使用int,除非您先研究一下您正在使用的语言,看看最快的类型是什么。

--加上我在评论中的另一个例子--

您有一个包含100个int的类,但是所有的int值都不会超过10。每次创建该类的对象时,您都会阻止每int创建32位,创建32*100=3200位。如果您用sBytes替换了这些ints,那么现在您正在阻止8*100=800。您正在保存2400位以供其他任何地方使用。

票数 -2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/252512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档