索引数组时是否应该始终使用size_t?

Agu*_*cía 13 c c++ pointers size-t virtual-memory

size_t即使数组的大小不足以超过int的大小,我在索引数组时也需要始终使用它吗?

这不是我何时应该使用的问题size_t。我只想知道,例如,一个程序是否具有2GB的可用内存(所有这些字段都可以由int32索引),但是此内存(虚拟内存)已分配给“字段” 14GB-计算机的16GB内存。

在这种情况下,如果我使用int32而不是size_t(或unsigned long int)来索引内存,它将总是失败吗?

也许问题更多是关于虚拟内存,而不是指针。

Cor*_*son 9

size_t是一个无符号整数,能够容纳您可以分配的最大对象的大小。它对索引很有用,因为这意味着它可以索引到可以分配的最大数组中。

这并不意味着索引是必需的甚至是推荐的索引。您可以使用任何足够大的整数类型来为数组建立索引。int_fast32_t可能更快,uint_least16_t结构可能更小等等。了解您的数据,您可以做出一个不错的选择。

虚拟内存不在C或C ++的范围内。从他们的角度来看,您只需索引到内存中,这取决于您的平台才能使其正常工作。实际上,您的应用仅使用虚拟地址;您的CPU / OS正在将虚拟地址转换为幕后的物理地址。您无需担心。