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

追加の落とし穴として、一部のリンカーには、マングルされた名前の長さに制限があります。これは、識別子の長さを超えるテンプレートおよびネストされたクラスで問題になる傾向がありますが、どちらかが問題を引き起こす可能性があります。

于 2010-04-21T10:52:16.040 に答える
2

制限が何であるか(または制限があるかどうか)はわかりませんが、たとえば暴走コードジェネレーターによって作成された病理学的コードをキャッチするために、制限があるべきであると思います。C ++標準では、その価値について、識別子の長さとして最低1Kが推奨されています。

于 2010-04-21T10:50:32.980 に答える