我的问题很简单。
我正在构建一个小程序来使用马尔可夫链分析和模拟随机文本。我的第一个 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/