c - 在 C 中声明一个大小为 26^5 的 5d 数组

标签 c arrays

我的问题很简单。

我正在构建一个小程序来使用马尔可夫链分析和模拟随机文本。我的第一个 MC 的内存大小为 2,处理字母表 {a, b, ..., z}。因此,我的转换矩阵大小为 26 * 26 * 26。

但是现在,我想使用内存大小为 4 的 MC 来增强我的模拟。因此,我需要将我的转换概率存储在大小为 26*26*26*26*26 的 5 维数组中。

问题是(我相信)C 不允许我声明和操作这样的数组,因为它可能太大了。事实上,我在编写时得到了 segmentation faults 11 提示:

int count[26][26][26][26][26]

有没有办法绕过这个限制?

谢谢!

最佳答案

在具有 32 位整数的典型 PC 架构上,int count[26][26][26][26][26] 创建一个大小为 47525504 字节、47MB 的对象,它是在大多数当前计算机上可管理,但对于自动分配来说可能太大了(又名在堆栈上)。

您可以将 count 声明为全局变量或静态变量,或者您可以从堆中分配它并使用以下声明使 count 成为指针:

int (*count)[26][26][26][26] = calloc(sizeof(*count), 26);
if (count == NULL) {
    /* handle allocation failure gracefully */
    fprintf(stderr, "cannot allocate memory for 5D array\n");
    exit(1);
}

关于c - 在 C 中声明一个大小为 26^5 的 5d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48609268/

相关文章:

c - 将 NULL 分配给指针是否是错误的编程?

arrays - 将从核心数据检索图像放入数组 swift

php - 在 mysql 中排序 VS 已经排序的数组

c - C中的生产者/消费者,带有pthread信号量和多线程

c - 如何在 C 中定义全局常量 char 指针并在整个文件中重新定义指向值

c - 为什么 C 中有这么多自定义数据类型?

c - 如何打印C语言函数的结果?

java - 如何使用Vector作为数据源?

javascript - 将数组从 AngularJS 传递到 Web API 并从 Web API 读取

Java奇怪的数组行为