当前位置: 首页 > 知识库问答 >
问题:

如何在现代C中创建一个巨大的数组?

谢高峯
2023-03-14

我想为大量数据(如整数)创建数组。这个数组将是2D矩阵的表示。< br >我不能使用STL,因为它将与CUDA一起运行。< br >我想知道以下选项的利弊:

  • int arr[SIZE]-这是创建数组的最简单方法。它在堆栈上分配,因此它将是最快的-这里的问题是大小非常有限。
  • int*arr=new int[SIZE]
  • int**arr=new int*[DIM1]-如果我们考虑效率,这是最坏的情况,但它允许存储INT_MAX*INT_MAX值。

我正在考虑第二种选择。我计算机上的Sizeof(int)是32位。我认为对于某些测试用例来说,它可能太小了(如果我使用大于32kx32k的矩阵)。

第三种选择似乎是最灵活的,但我听说这不是好的做法。

有没有另一种选择来创建这样的数组(

共有1个答案

狄凯
2023-03-14

如何在现代C中创建一个巨大的数组?

使用动态分配1。在标准的托管C中,它通常使用std::vector创建。

我不能使用STL,因为它将与CUDA一起运行。

你是说标准库吗?在这种情况下,解决方案是使用另一个可以与 CUDA 一起运行的容器。

int* arr = new int[SIZE]

您确定 new [] 的使用不受限制的原因与容器的使用受到限制的原因相同吗?我希望如果容器不是,新的[]就不能成为一种选择。目前尚不清楚您的局限性究竟是什么。

无论如何,你不应该使用裸露的拥有指针。使用容器或至少一个智能指针。

int** arr = new int*[DIM1]

如果您需要拥有不同长度的行或需要交换行,这可能很有用(忽略使用裸指针作为所有权,这是不好的)。否则,这与单维数组相比没有优势。

有可能创建一个长度大于INT_MAX/2的一维数组吗?

假设32位< code > INT ,< code > INT _ MAX/2 将是1千兆字节。这在64位系统上没有问题,只要您有可用的内存。在32位系统上,也许只是勉强,但你可能没有足够的内存。

但我通常使用库达管理创建int*,然后从文件中填充它。所以std::vector在这里不会有帮助,因为我甚至不必使用它

如果你使用库达恶意托管,那么你就不会使用新的[],所以它在这里也无济于事。

1除非阵列需要非常大,不能作为一个整体保存在内存中,否则必须在文件系统上创建一个文件。

 类似资料:
  • 问题内容: 我在cron作业中使用mysqldump备份了超过200万行的数据库。 它会创建一个文本文件,该文件可用于从命令行还原数据日志。 我认为在还原之前编辑转储将是有用的,这是一种 快速 更改值和表或列名的方法-至少要等到我了解更多并对使用ALTER和UPDATE做到这一点充满信心为止。 编辑大型文本文件不会打扰我,但是我惊讶地发现,在数据库的 250兆字节 转储中, 只有大约300行 。每

  • 问题内容: 我真的对在Swift中创建数组的方式感到困惑。您能否告诉我,有多少种方法可以创建一个带有细节的空数组? 问题答案: 干得好: 上面的内容还适用于其他类型,而不仅仅是字符串。这只是一个例子。 为它增值 我想您最终将要为其添加一个值! 要么 通过插入添加 一旦有了一些值,就可以插入新值而不是附加值。例如,如果要在数组的开头插入新对象(而不是将它们附加到末尾): 或者,您可以使用变量使插入更

  • 问题内容: 我有一个巨大的文本文件(〜1GB),可惜我使用的文本编辑器无法读取这么大的文件。但是,如果我可以将其分为两部分或三部分,那就没问题了,因此,作为练习,我想用python编写一个程序来做到这一点。 我想让程序执行的操作是找到文件的大小,将该数字分成多个部分,然后对于每个部分,逐块读取至该点,写入 文件名.nnn输出文件,然后读取- 到下一个换行符并将其写入,然后关闭输出文件,等等。显然,

  • 问题内容: 我正在尝试创建一个代理服务器,以将请求从客户端传递到第三方网站(例如google)。我的代理只需将传入请求镜像到目标站点上的相应路径,因此,如果我的客户请求的url为: 应提供以下资源: 这是我想出的: 它适用于html页面,但对于其他类型的文件,它仅返回空白页面或来自目标站点的错误消息(在不同站点中有所不同)。 问题答案: 我认为处理从第三方服务器收到的响应不是一个好主意。这只会增加

  • 这似乎不起作用:没有console.log,控制台中只有一个错误,显示 我是否可以通过这个文件进行搜索,尽管它很大,而且不用花太多时间? 我也有联机托管的文件的url(https://s3.amazonaws.com/openrecipes/20170107-061401-recipeItems.json.gz),但我似乎无法连接到它(CORS关于没有允许我的头的错误)。

  • 本文向大家介绍如何在C#中创建StringBuilder?,包括了如何在C#中创建StringBuilder?的使用技巧和注意事项,需要的朋友参考一下 要在C#中创建StringBuilder,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-