20

见标题​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ /p >

4

3 回答 3

22

简短的回答:

长答案:

是的,它必须足够小才能放入内存中,否则不,不是真的。如果有一个内置限制(我不相信有),它是如此巨大,你真的很难达到它。

实际上,你让我很好奇,所以我创建了以下 Python 程序来生成代码:

#! /usr/bin/env python2.6
import sys;
cppcode="""
#include <iostream>
#include <cstdlib>

int main(int argc, char* argv[])
{
     int %s = 0;
     return 0;
}
"""

def longvarname(n):
    str="x";
    for i in xrange(n):
        str = str+"0";
    return str;

def printcpp(n):
    print cppcode % longvarname(n);

if __name__=="__main__":
    if len(sys.argv)==2:
        printcpp(int(sys.argv[1]));

这将使用所需的长度变量名称生成 C++ 代码。使用以下内容:

./gencpp.py 1048576 > main.cpp
g++ main.cpp -o main

以上没有给我任何问题(变量名的长度大约为 1MB)。我尝试了一个千兆字节,但我对字符串构造并不那么聪明,所以我决定在 gencpp.py 花费太长时间时中止。

无论如何,我非常怀疑 gcc 是否为变量名预先分配了 1MB。它纯粹受内存限制。

于 2010-04-21T10:32:49.977 回答
4

一个额外的问题,一些链接器对损坏名称的长度有限制。这往往是模板和嵌套类的问题,而不是标识符长度,但两者都可能引发问题 afaik

于 2010-04-21T10:52:16.040 回答
2

我不知道限制是什么(或者是否有限制),但我认为最好有一个限制,以便捕获病态代码,例如由失控的代码生成器创建的代码。对于它的价值,C++ 标准建议标识符长度至少为 1K。

于 2010-04-21T10:50:32.980 回答