2012-05-17 15 views
7

Javaにあるように、CまたはC++にintern()メソッドがありますか?存在しない場合、CまたはC++でstring interningをどのように実行できますか?CまたはC++で文字列インターンを行うにはどうすればよいですか?

+2

ちょうどあなたが欲しいものをコーディングしてください。 –

+3

Suhail、これらの質問をご覧ください:http://stackoverflow.com/questions/1116040/memory-efficient-c-strings-interning-ropes-copy-on-write-etc、http://stackoverflow.com/質問/ 4060411/does-stdstring-use-string-interning? – dbf

+0

@David Schwartzキャッシングのような機能。私は文字列のインターナショナルをしたい –

答えて

15

boost::flyweight<std::string>あなたが探しているものとまったく同じです。

+0

他の方法はありますか?私はこのライブラリを認識していません –

+0

@SuhailGuptaは現在あなたです:http://www.boost.org –

+0

@Erick Robertsonしかし、他の方法がありますか? –

6

C言語にはJavaのようなintern()メソッドがありますか?

標準Cライブラリにはありません。

C言語で文字列インターンシップを実行する方法がない場合は、

大変なことに、私は恐れます。最初の問題は、Cでは "string"が明確に定義されていないことです。代わりにchar *があります。ゼロ終了文字列を指す場合もありますし、文字位置を示す場合もあります。次に、いくつかの文字列が他のものに埋め込まれているか、スタックに格納されているという問題があります。どちらもインターンシップを不可能かつ/または無意味にします。次に、Cの文字列リテラルが、Javaが保証する方法で、インターン...されることが保証されていないという問題があります。最後に、インターンは、言語がガベージコレクションされていない場合、発生するのを待っているストレージリークであるという問題があります。それでは、Cでインターンを実装する方法は、中身の文字列を保持するためのハッシュテーブルを作成することです。文字列か、それ自身のヒープノードに割り当てられた文字列でなければ、文字列をインターンにできないという前提条件にする必要があります。ストレージリークの問題に対処するには、文字列の参照カウントを必要とします。

3

セマンティクスの値が の言語で、文字列インターンシップとは何でしょうか?インターンは、 の値アイデンティティを持つ文字列への参照のオブジェクトIDを強制するメカニズムです。参照セマンティクスを使用し、オブジェクトIDをデフォルトの 比較関数として使用する言語 に関連します。 C++ではデフォルトで値セマンティクスが使用されており、タイプ (std::stringなど)にはIDがないため、インターンは意味をなさない。

いくつかの実装(g ++など)では、舞台裏で文字列データに参照セマンティクス の形式を使用できます。そのような実装 は、そのデータのインターンシップを拡張として提供することができます。 (G ++ は、私の知る限り、しませんが、「インターン」空 の文字列が自動的に行います。)

他のほとんどの実装では、さらに 内部参照セマンティクスを使用しないでください。 文字列最適化(MSのような)を使用してインプリメントをどのようにインテンシブしますか?データが文字通りクラス にある場合、はありません。動的に割り当てられたメモリがあります。

関連する問題