Memory 为什么不同的数据类型对相同的数据占用更多的内存?

Memory 为什么不同的数据类型对相同的数据占用更多的内存?,memory,types,language-agnostic,primitive-types,information-theory,Memory,Types,Language Agnostic,Primitive Types,Information Theory,例如,如果我想存储数字1,我可以使用整型,占用32位或长型,占用64位,但是会有相同数量的信息(从符号角度看)在这两种数据类型上。变量占用的空间基于类型,而不是实际包含的值。 类型取决于可能值的总和,其中当前实际值仅为一个。因此,定义集需要一定的空间,而不是值本身 编辑: 我感到困惑:) 假设我们有2个位,可以通过4种方式组合: 00 01 10 11 现在这些都是2位的可能组合。 那些所代表的完全是无关紧要的。我们只有4个不同的州。我们可以将它们映射到我们想要的任何东西: 00 white

例如,如果我想存储数字1,我可以使用
整型
,占用32位
长型
,占用64位,但是会有相同数量的信息(从符号角度看)在这两种数据类型上。

变量占用的空间基于类型,而不是实际包含的值。 类型取决于可能值的总和,其中当前实际值仅为一个。因此,定义集需要一定的空间,而不是值本身

编辑

我感到困惑:)

假设我们有2个位,可以通过4种方式组合:

00
01
10
11
现在这些都是2位的可能组合。 那些所代表的完全是无关紧要的。我们只有4个不同的州。我们可以将它们映射到我们想要的任何东西:

00 white
01 black
10 red
11 blue

我们可以对这4种状态进行编码的事实与类型有关。我们存储在该类型变量中的任何值都将始终占用编码所有4个可能值所需的所有2位


字符串是一个显著的例外。它们可以被看作是图灵的有限磁带的现代实现,在该磁带上可以刻写字母表中的字符。值得注意的是,我们可以使用该类型存储所有人类知识(例如,所有书面书籍的总和可以存储在一个字符串中)。

变量根据类型占用空间,而不是实际包含的值。 类型取决于可能值的总和,其中当前实际值仅为一个。因此,定义集需要一定的空间,而不是值本身

编辑

我感到困惑:)

假设我们有2个位,可以通过4种方式组合:

00
01
10
11
现在这些都是2位的可能组合。 那些所代表的完全是无关紧要的。我们只有4个不同的州。我们可以将它们映射到我们想要的任何东西:

00 white
01 black
10 red
11 blue

我们可以对这4种状态进行编码的事实与类型有关。我们存储在该类型变量中的任何值都将始终占用编码所有4个可能值所需的所有2位


字符串是一个显著的例外。它们可以被看作是图灵的有限磁带的现代实现,在该磁带上可以刻写字母表中的字符。值得注意的是,我们可以使用该类型存储所有人类知识(例如,所有书面书籍的总和可以存储在一个字符串中)。

变量根据类型占用空间,而不是实际包含的值。 类型取决于可能值的总和,其中当前实际值仅为一个。因此,定义集需要一定的空间,而不是值本身

编辑

我感到困惑:)

假设我们有2个位,可以通过4种方式组合:

00
01
10
11
现在这些都是2位的可能组合。 那些所代表的完全是无关紧要的。我们只有4个不同的州。我们可以将它们映射到我们想要的任何东西:

00 white
01 black
10 red
11 blue

我们可以对这4种状态进行编码的事实与类型有关。我们存储在该类型变量中的任何值都将始终占用编码所有4个可能值所需的所有2位


字符串是一个显著的例外。它们可以被看作是图灵的有限磁带的现代实现,在该磁带上可以刻写字母表中的字符。值得注意的是,我们可以使用该类型存储所有人类知识(例如,所有书面书籍的总和可以存储在一个字符串中)。

变量根据类型占用空间,而不是实际包含的值。 类型取决于可能值的总和,其中当前实际值仅为一个。因此,定义集需要一定的空间,而不是值本身

编辑

我感到困惑:)

假设我们有2个位,可以通过4种方式组合:

00
01
10
11
现在这些都是2位的可能组合。 那些所代表的完全是无关紧要的。我们只有4个不同的州。我们可以将它们映射到我们想要的任何东西:

00 white
01 black
10 red
11 blue

我们可以对这4种状态进行编码的事实与类型有关。我们存储在该类型变量中的任何值都将始终占用编码所有4个可能值所需的所有2位


字符串是一个显著的例外。它们可以被看作是图灵的有限磁带的现代实现,在该磁带上可以刻写字母表中的字符。值得注意的是,我们可以用这种类型存储所有人类知识(例如,所有书面书籍的总和可以存储在一个字符串中)。

因此,它基于一组内置于类型中的定义来将存储值转换为真实值?不,需要两种不同的信息状态。因此,至少需要一个位来存储状态。要区分2^n个状态,需要n个位。你出生的宇宙就是这样运转的。没办法。因此,如果您有一个可以编码1024个不同状态的类型,则至少需要10位。就这些了。好了,现在明白了。当你提到定义集时,我有点困惑,我想到的是一个查找表。所以它基于一组内置于类型中的定义来将存储值转换为真实值?不。需要两种不同的信息状态。因此,至少需要一个位来存储状态。要区分2^n个状态,需要n个位。你出生的宇宙就是这样运转的。没办法。所以,如果你有一个类型,可以编码1024个不同的字符