使用小数据类型(例如short而不是int)是否会减少内存使用量?

我的问题基本上是关于C#编译器如何处理小数据类型的内存分配。 我知道,例如add这样的运算符是在int上定义而不是在short上定义的,因此计算将被执行,好像short是int成员一样。

假设如下:

  • 没有业务逻辑/validation逻辑与short作为数据类型的选择相关联
  • 我们没有对不安全的代码做任何事情

是否尽可能使用短数据类型会减少应用程序的内存占用,是否建议这样做? 或者使用short等不值得努力,因为编译器例如分配int32的完整内存ammount并在进行算术时添加额外的强制转换。

任何关于假定的运行时性能影响的链接都将非常感激。

相关问题:

为什么我应该在C#中使用int而不是字节或short

整数蓝调,短+ +短问题

从仅存储器的角度来看,使用short而不是int会更好。 原因很简单,一个short变量只需要内存中int变量大小的一半。 CLR不会在内存中扩展为int

然而,这种减少的内存消耗可能并且可能会显着降低应用程序的运行时性能。 所有现代CPU的32位数字都比16位数字表现更好。 此外,在许多情况下,当调用采用int参数的方法时,CLR必须在shortint之间进行转换。 在采用这种方式之前,您还需要考虑许多其他性能因素。

我只会在应用程序的非常专用的位置和模块中更改它,并且只有在您确实遇到可测量的内存不足时才会更改。

在某些情况下,您当然可以轻松地从int切换到short而不会影响性能。 一个例子是一个巨大的int数组,所有这些也适合short s。

只有在程序中包含这些类型的非常大的数组(或者像List<>这样的数组上构建的集合)或者由相同类型组成的打包结构数组时,它才能在内存使用方面有意义。 “大”意味着这些arrays的总内存占用量占工作集的很大一部分,占可用内存的很大一部分。 至于可行性,我冒昧地建议不要使用短类型,除非你的程序操作的数据是以short等方式明确指定的,或者数据量达到千兆字节。

简而言之 – 是的。 但是,您还应该注意内存对齐。 您可能会在c#中找到掌握C#结构和类的内存对齐? 有用

取决于你使用的短裤。 另外,您是否正在分配内存占用量很重要的许多变量?

如果该程序将用于移动设备或具有内存限制的设备,那么我可能会担心。 但是,目前大多数机器都运行至少1-2 GB的RAM,并且具有相当不错的双核处理器。 此外,如今大多数移动设备正在成为野兽迷你电脑。 如果你声明这种类型的机器会开始死亡,那么你的代码就已经出现了问题。

但是,在回答这个问题时。 如果你只需要一个2字节的变量来填充它们就可以在内存有限的机器中声明很多4字节变量,那么你应该使用short。

如果您执行复杂的计算,平方根等,或高值计算。 那么你应该使用更多字节的变量,这样你就不会有丢失任何数据的风险。 只需在需要时声明您需要的东西。 如果您已经完成它以确保C#清理它,如果您担心内存限制,请将其归零。

说到机器语言,在注册表级别,我认为最好与注册表大小保持一致,因为大多数移动和算术function都是在注册表边界完成的。 如果机器具有32位注册表集,则最好与32位对齐。 如果机器具有用于I / O操作的16位注册表,则最好与16位对齐以减少移动内容时的操作数。