タイトルを参照してください</p >>
3 に答える
短い答え:
いいえ
長い答え:
はい、メモリに収まるように十分に小さくする必要がありますが、そうでない場合はそうではありません。組み込みの制限がある場合(あるとは思わない)、それは非常に大きいので、それに到達するのは非常に困難です。
実際、あなたは私に本当に興味を持ったので、コードを生成するために次の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を事前に割り当てることは非常に疑わしい。それは純粋に記憶によって制限されています。
追加の落とし穴として、一部のリンカーには、マングルされた名前の長さに制限があります。これは、識別子の長さを超えるテンプレートおよびネストされたクラスで問題になる傾向がありますが、どちらかが問題を引き起こす可能性があります。
制限が何であるか(または制限があるかどうか)はわかりませんが、たとえば暴走コードジェネレーターによって作成された病理学的コードをキャッチするために、制限があるべきであると思います。C ++標準では、その価値について、識別子の長さとして最低1Kが推奨されています。