問題タブ [string-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
7 に答える
24096 参照

java - Java の String プールに関する質問

次のコードを検討してください。

newキーワードを使用すると、Java はabc String再度作成しますよね? Stringこれは通常のヒープまたはプールに格納されますか? プールStringで終わるのは何秒ですか?String

0 投票する
2 に答える
5005 参照

c - 文字列リテラルの C 最適化

私はgdbで次のことを調べています:

...そして、私は以下を取得します:

文字列ポインターが同等の単語で同じであることに本当に驚いています。別の配列の文字列と同じであるかどうかに関係なく、各文字列がスタック上に独自のメモリを割り当てられると思っていたでしょう。

これはある種のコンパイラ最適化の例ですか、それともこの種の文字列宣言の標準的な動作ですか?

0 投票する
3 に答える
6343 参照

c++ - 動かないことが保証されている「文字列プール」の実装

「一連の文字」を繰り返し挿入できる「文字列プール」オブジェクトが必要です (このフレーズは、std::string または C 文字列と混同せずに「文字列」を意味するために使用します)、シーケンスへのポインターを取得します。 、およびプールを拡大する必要がある場合にポインターが無効にならないことが保証されます。シンプルなstd::stringプールを使用すると、文字列が初期容量を超えたときに再割り当てされる可能性があるため、機能しません。これにより、以前のすべてのポインターが無効になります。

プールは際限なく大きくなるわけではありません。clear()メソッドを呼び出す時点が明確に定義されていますが、最大容量も確保したくありません。動かなくても成長できるはずです。

私が検討している 1 つの可能性は、文字の新しいシーケンスをそれぞれ a に挿入してforward_list<string>取得することbegin()->c_str()です。もう 1 つは への挿入unordered_set<string>ですが、 unordered_set を大きくする必要があるときに何が起こるかを見つけるのに苦労しています。私が検討している 3 番目の可能性 (あまり熱心ではありません) は、一連の文字を連結する 1K バッファーの独自のチェーンを展開することです。これには、このプロジェクトの要件である最高のパフォーマンスが得られるという利点があります (推測します)。

他の人がこれにどのようにアプローチすることを推奨するかを聞くことに興味があります。

更新 1: std::string または null で終了する文字配列を意味することなく、「文字列」の一般的な概念と同等であるというフレーズ「文字列」の使用を明確にするために編集されました。

0 投票する
3 に答える
167 参照

java - Java String の不変性

私が走れば、

次の間に違いはありますか?

ここに私が混乱しているものがあります:

Head First Java は次のように述べています。 s1はすでに「abc」を作成しており、s2はそれを参照するだけです。私は正しいですか??

0 投票する
1 に答える
865 参照

java - Java 文字列の連結とオブジェクト

次のコードではいくつのオブジェクトが作成されますか?

私の理解: a、b、および c は文字列リテラルであり、文字列プールに格納されます (したがって、新しいオブジェクトは作成されません)。次に、「+」演算子を使用して追加するときに、内部で StringBuffer を使用するため、「abc」(StringBuffer) を保持する 1 つのオブジェクトが作成されます。そして、それは新しい String オブジェクトで返されます (その値は "abc" になります)。

-> したがって、この操作中に合計 2 つのオブジェクトが作成されます (1 つの文字列と 1 つの StringBuffer)。

-> また、文字列「abc」は文字列プールに存在しません。

私が間違っている?

0 投票する
0 に答える
61 参照

java - 文字列プールに間接的にアクセスする方法はありますか?

Java の文字列プールが非表示になっていることは承知しています (ほとんどの場合、適切な目的のため)。ただし、プール内の要素を監視して確認したい場合はどうすればよいでしょうか。これは間接的な方法 (リフレクションや JNI など) を使用して実現できますか?それとも完全に不可能ですか?

これが可能である場合、それがどのように行われるかについてのアイデアはありますか? 私の考えは、ネイティブメソッドが呼び出される場所をチェックして、そこからString#intern()情報を取得できるかどうかを確認することでしたが、どこで呼び出されるかを理解するのに苦労しています。

飛び込む前に、これが可能かどうかを知りたい