c - 是什么限制了 c 中嵌套循环的数量?

标签 c loops

编辑:对于那些正在寻找问题答案的人来说,标准在编译时限制了嵌套循环的数量。在运行时,这是一个不同的问题,因为唯一的限制是程序段的大小。

已解决:我在构建过程中看得太早了。 c 文件得到进一步的预处理。继续后续步骤。

我对通过 perl 从应用生成发音规则的语言生成的 c 代码有疑问。在本质上,输入是一个巨大的发音规则异常(exception)字典。代码中充满了 goto,直到其中一个异常字典达到 23K 规则为止。

代码基本上是不可读的,但在删除似乎是第 6200 个嵌套循环后,我设法编译了 c 代码:

for (dictionionary1=seed1;dicitonary1<limit1;dictionary1++)
{
    for (dictionionary2=seed2;dicitonary2<limit2;dictionary2++)
    {
           /* .... */
        for (dictionionary6199=seed6199;dicitonary6199<limit6199;dictionary6199++)
        {
               /* two hundred more removed adding one makes it not compile */

        }

    }
}

gcc 和 xlC 都能处理这些问题,但 aCC 3.73(在 H11.23 PA RISC 上)令人作呕。

Compiling /home/ojblass/exception_dictionary_a.c...
Loading the kernel...
Pid 18324 killed due to text modification or page I/O error
/bin/ksh: 28004 Bus error(coredump)
*** Error exit code 138

我找到了这个link并尝试了许多建议的修复方法,但均未成功。

由于遗留原因,我必须针对 32 位进行编译(它使用 32 位库,而我没有 64 位对应库)。

maxdsiz = 256 MB (x10000000) tried up to 4 GB
maxssiz = 16 MB (x1000000) tried up to 100MB
maxtsiz = 256 MB (x10000000) tried up to 1 GB

关于编译器设置的任何建议或 aCC 3.73 文档的良好链接?我淹没在搜索结果中。

我编写了一个解决方法,将字典分成两部分,生成 dictionary_an.c 和 dictionary_az.c。为了实现这一点,我不得不触及一些我觉得触碰时感觉不舒服的核心逻辑,我希望回到原来的配置。

最佳答案

哇 - 我知道这对您没有帮助,但是嵌套 6199 层的深度远远超过了 C 或 C++ 的要求(C90 为 15 层,C99 为 127 层,C++ 为 256 层)。

我很好奇的是它运行得有多好——如果你的字典有任何大小,循环迭代的次数一定是天文数字。假设每个字典的大小是 10: (10 ^ 6199) 是一个相当大的数字。即使每个词典只有 2 个项目,(2 ^ 6199) 也令人印象深刻。

关于c - 是什么限制了 c 中嵌套循环的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/764307/

相关文章:

c++ - 如何读取一个http请求(一个http代理服务器)

php - 由于 while 循环次数过多,数据库查询时间较长

algorithm - 以递增顺序和最佳方式打印 (3^i *7^j) 的值

javascript - 两个 'if' 语句和 'if/else' 循环之间的差异

javascript - 无需键即可迭代 Json 数组

c++ - 在 C++ 项目的 C 部分 (VS10)

c - 写入 Linux 设备驱动程序导致死循环

c - C 的新手 : whats wrong with my program?

c - 如果我的字符串在 C 中有奇数个字符,我该如何使用填充?

PHP循环遍历动态数组