• 締切済み

テキストセグメントについて

セグメントの質問なのですが文字列の場合ヒープではなくてテキストセグメントに保存されるのではなかったでしたっけ?

みんなの回答

noname#208124
noname#208124
回答No.5

VC++が規定でリテラルを入れる.rdataセクションはヒープではないけれどもPAGE_EXECUTE_READWRITEではないという意味でテキストセグメントでもないなあ

79562
質問者

お礼

回答ありがとうございます。では何なのでしょうか?

79562
質問者

補足

あともう1つなんですが、rdataセクションってなんでしょうか?質問ばかりですみません。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

まずは言語を明確にしてください。 次に、処理系を明確にしてください(翻訳処理系・実行処理系とも)。 そして、翻訳に指定するオプション等の情報をすべて明確にしてください。 さらに、「文字列」が何を指すのかを明確にしてください。 最後に、その「文字列」が現れる文脈を明確にしてください。

79562
質問者

お礼

言語はC言語、処理系はvisualC++、文字列は文字列リテラルです。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

処理系が特定されていないので規格の話とします. 「ヒープ」って何? 「テキストセグメント」って何? 特定の処理系が特定の作業をするために「ヒープ」あるいは「テキストセグメント」と呼称されるメモリ領域を使うことはあるかもしれませんが, そのようなことは C/C++ の規格で規定されているものではありません. そもそも規格レベルだと「引数をスタックに積んで関数を呼び出す」がアウトなんだよなぁ....

79562
質問者

お礼

回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

仕様上「テキストセグメント」なる言葉も「ヒープ」なる言葉も, 少なくとも文字列に関わる場所ではでてきません。 文字列定数は静的記憶域期間を持つオブジェクトとして処理され, char * / wchar_t *は静的・自動・割付のどれかの記憶域期間を持つchar/wchar_tへの配列のオブジェクトを参照し, std::basic_stringはおそらく内部で割付記憶域期間を持つオブジェクトを参照するcharTへのポインタを保持しているでしょう。

79562
質問者

お礼

回答ありがとうございます。std::stringはポインタなのですね。わかりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

テキストセグメントってのは実行時のメモリの区分で、基本的にはプログラムが乗る部分のことですね。読み込み・実行が(通常)可能で、書き込みは(通常)不可。実行ファイル(及び動的ライブラリ)の該当セクションのデータがだいたいそのまま乗っかります。 静的な文字列なら.rodataセクションに乗ってたと思います。rodataはテキストセグメントにマッピングされますね。 いっぽうで、実行時に作成される文字列は実行ファイルに載せようがないので、テキストセグメントには乗りません。実行時にヒープに確保されることになります。 で、私はC++には疎いのですが、stringオブジェクトを確保した場合はそのオブジェクトはヒープ領域に作られるんではないでしょうか? ソースコードに書かれている文字列であれば、char列自体は静的に確保されていると思いますが、オブジェクト自体はヒープに確保されるんではないかと思います。

79562
質問者

お礼

回答ありがとうございます。 それで質問なのですが <実行に作成される文字列は実行ファイルに載せようがないので、テキストセグメントには乗りません。 実行時に作成される文字列とはどういった時なのでしょうか?あと静的な文字列とはどういうものなのでしょうか?質問ばかりですみません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セグメント・ディスクリプタについて

    セグメント・ディスクリプタについて質問なのですが、これはスタックセグメントやデータセグメント、テキストセグメントを指しているのでしょうか?いまいちわかりません。分かる方いらしたらわかりやすいようご教授ください。

  • 同一セグメントって何?

    A 192.168.1.1 と B 192.168.2.1 は 同一セグメントでしょうか? どちらもデフォルトゲートウェイは 255.255.255.0 です。 今、AのPCからBのPCを PcAnywhereでリモートしたいのですが、 できるのかどうか知りたいです。 同一セグメントでないとできないという 噂を聞いたのですがこの場合はどうでしょうか? すみません。どなたか教えて下さい。

  • テキストデータとは

    コンピュータの世界で、実務上一般的にテキストデータと言われるのは 、例えば、エクセルで言えば表示されているものつまり最も表層状に現れている文字のことでよろしいのでしょうか?これが、例えばC言語の プログラム作成なら、エディタ上に表示されている文字列等という認識になるのでしょうか?変な質問かも知れませんが、一般的にオフィス上でテキストデータに変換した場合あくまでそのソフトが処理する文字列の集まりという認識でよろしいのでしょうか。

  • テキストフィールドについて

    すみません、質問させてください。 できるのかどうかと、できる場合はその方法をご教授いただきたいです。 テキストフィールドをクリックした時にいくつか文字列を選択できるようにしたいです。 例えばchromeとかだと一度入力した文字列が出てきます、それを意図的に決まった文字列の候補を出し、選択できるようにする事は可能でしょうか? もしかしたらjqueryのプラグインとかありそうな気もしています。 その続きを手入力で入力する、というのが理想です。 調べても出てきませんでした。 何卒よろしくお願いいたします。

  • テキストファイルとして保存

    テキストボックス内の文字列をテキストファイルとして保存したいのですが。詳しく解説があるサイトやサンプルを紹介していただければ幸いです。 環境 Visual Basic 6.0 Windows 2000

  • セグメントLEDについて質問です。

    カテゴリーの選びようが無かったのでここにします。 新しく技術ー電子部品 などのカテゴリーがあれば良かったのに・・・ セグメントLEDについて質問です。 英数字などが表示できる14セグメントLED を売ってるWEBサイトがあったら教えてください。 ちなみに普通の7セグLEDは対応文字数が 限られてしまいます。例えば 「D」「O 」や「B」と「8」では文字の形状が似てるため 細かい表示が出来ません。

  • FireFoxのテキストボックスの履歴

    FireFoxのテキストボックスの履歴 FireFoxでフォームを入力しようとしてテキストボックスをフォーカスしてキーボードの下矢印キーを押すと過去に入力した文字列がドロップダウンのようにいくつか表示されました。 それらの文字列はどこに記録されているのでしょうか? プライバシーのフォームデータにチェックが入っているのでこれを疑っていますが保存先が分かりません。 また、保存データは暗号化されているのでしょうか?対象文字列をHDDから検索しましたが見つかりませんでした。

  • ダイナミックテキストの幅を広げるには?

    ダイナミックテキストに外部から読み込んだ文字を表示させているのですが、 読み込んだ文字がフィールドに全て入らなかった場合にダイナミックテキストの表示幅をActionScriptを使用して変更する事は可能でしょうか? 例えば20文字程度が表示できるテキストフィールドに30文字の文字列を表示させたい場合、テキストフィールドのサイズを広げたいのです。 最初から30にすればいいのではと思うかもしれませんが、構造上それは避けたいです。 良い方法を御存知の方がいらっしゃいましたらアドバイスをお願い致します。

    • ベストアンサー
    • Flash
  • C# 文字をリッチテキストで保存したい。

    例えば 「あいうえお」といった文字列を赤字で RTF(リッチテキストファイル)保存するにはどうすれば良いのでしょうか? RichTextBoxクラスを使ってやる方法は何となくわかったのですが、コンソールアプリケーションでわざわざWINDOWS.FORMSを使うのも変かなと思い質問させて戴きました。

  • 【Javascript】(テキストボックスの)テキストの末尾にフォーカスを置きたい【フォーム】

    onLoad時にテキストボックスにフォーカスをあてるのですが、 質問タイトルのようなことができません。 前ページからPOSTで持ってきた文字列を入れたテキストボックスなのですが、 BODYタグ部分にonLoad="frm.elm.focus();"と書くと、 そのテキストボックス内の文字列の先頭にフォーカスが行きます。 文字列の続きを入力する項目なので 文字列の末尾にフォーカスを置きたいのですが 方法はありますでしょうか。 ご存知の方いらっしゃいましたらご教示願います。 質問が解りづらかったらすみません。 宜しくお願い致します。