引用结构通常使用 64 位还是 32 位?



我了解到一个引用需要64位:

也就是说,引用结构通常使用64 位作为存储在数组中的内存地址,以及用于表示被视为元素的对象的任何位数。

我怎样才能看到它的实际效果?

In [75]: patients = ["trump", "Trump", "trumP"]
In [76]: id(patients[1])
Out[76]: 4529777048
In [77]: math.log2(4529777048)
Out[77]: 32.076792897710234

这是2**32而不是2**64.

对于math.log2(id(obj)),你会问"2 的幂是多少次方,给我们内存中obj的地址?

这不是id()的工作方式。id()为每个对象提供了一个恒定且唯一的值。在CPython中,这是内存中对象的地址。

在 64 位系统上,将此地址存储在 64 位变量中是有意义的,因为您无法使用 32 位变量覆盖整个地址空间。

但是,64位引用并不意味着每个对象的地址都是2**64。截至2018年,这甚至是不可能的,因为我们的x86_64 PC只有一个48位地址空间。您的第一个患者的ID接近2**32(主要是(巧合。

id将返回内存中的地址。所以,这不是你要找的。

通常,在 Python 中获取内存大小的一种方法是使用sys.getsizeof()。但是,这将返回对象的大小。您对该对象的引用的大小感兴趣。

但是,您仍然可以或多或少地计算如下:8 * struct.calcsize("P").这基本上可以揭示您使用的是 32 位还是 64 位系统,因此您知道引用的大小。但真正通过检查参考来计算它,我不知道这是否可能。

最新更新