【问题标题】:how many integers are in a 16 kb array16 kb 数组中有多少个整数
【发布时间】:2011-06-17 10:37:01
【问题描述】:

我问这个问题是因为我正在使用 cuda 在 gpus 上编程。共享内存为 16kb,因此我需要知道我可以创建的最大整数数组是多少?
如果我有 4GB 内存,是否也可以创建一个大约(3,000,000 个整数)的大数组?计算这个的正确方法是什么?在 32 位操作系统上是 4 个字节的整数,在 64 位系统上是 8B?因此,64 位操作系统上的相同整数数组将具有比 32 位操作系统上双倍的内存空间?当谈到内存空间计算时,我感到迷茫……有人可以“指导”我吗?

我正在使用 c 作为编程语言...

【问题讨论】:

  • 您使用什么编程语言? “整数”在不同语言中表示不同的事物(和不同的大小)。
  • 这取决于您需要存储的最大整数的大小?
  • 它取决于整数?所以 5 会比 100 占用更少的空间?
  • 不,但是 int32 占用的空间比 int64 少

标签: arrays memory size cuda


【解决方案1】:

整数是 32 位还是 64 位(或其他)取决于您的处理器、操作系统和编译器设置,以及您使用的确切数据类型。我相信int 在普通平台上是 32 位,long long 是 64。long 是不同的:在 x86 Linux 上,它在 32 位机器上是 32 位,在 64 位机器上是 64 位。不过,我认为 Windows 做了一些不同的事情。在计算大小方面,您可以通过size * sizeof(T) 确定T 的数组将占用多少字节;手动,您可以将大小乘以数字中的位数除以 8。因此,16kB 的内存可以存储 4k 32 位整数或 2k 64 位整数,而 3M 元素数组将占用 12MB 的 32-位整数和 24MB 用于 64 位。您可以独立于硬件选择数据大小。您可能还想查看 C99 的 <stdint.h> 以获取具有特定位大小的整数类型。

【讨论】:

  • 所以如果我需要更多内存,我应该始终使用 32 位操作系统?
  • 您可以在 64 位操作系统上使用 32 位整数类型。特别是,int 在 64 位 x86 系统上默认为 32 位,即使使用 64 位操作系统也是如此。如果您的系统有这么多内存,64 位操作系统可以让您访问更多内存(超过 32 位应用程序的 2GiB 或 3GiB 限制)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多