- ベストアンサー
テーブル展開について
はじめまして! 今、テーブル展開について非常に悩んでいます。 ファイルに記述されている文字列(可変長)を 共有メモリに展開するにはどうしたらいいのか 知っている方がいらしたら教えてもらえませんか? ちなみに言語はC言語です。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
勘違いしてたらゴメンナサイ。 テーブル展開でお悩みとは、要するに可変長列/可変長行のファイルの内容をメモリ上に展開したいがどういうデータ構造にすれば良いか?という意味ですか? 多次元の可変長データならリスト構造が定石かなぁ? ファイルから1行読んだ後、lengthを取って見合う長さのエリアをallocし、そこにstrcpy、さらにリスト構造体をallocしてそこに前述の文字列の先頭ポインタを代入、次行以降これを繰り返してリスト構造体を繋げていく。 1charづつリスト構造体に入れて2次元リストにする手もありますが、1行分の文字列の登録/抽出処理が面倒になるので、行方向は1本の文字列として上記の様にlengthを見てallocしてしまうのが簡単かと。 こんな文章ではイメージできない!(もっともだ)様でしたら、下記URLなどを参考にして下さい。 最後に、リスト構造はゴミ掃除が大変なのでご注意を。
その他の回答 (1)
- terra5
- ベストアンサー率34% (574/1662)
用途によっていろいろやり方があると思うので, 何をしたいかによると思います。 文字列が可変長でも文字列の数が固定かどうかとか、 あとで中身を別の物に長さも変えて入れるかどうかとか、 …。 また、共有メモリを使う場合、単一の領域のみ使うか, 複数使ってもよいか、大きさはどのぐらいにするかでも 違ってくると思います。 OSによっても多少事情がことなるかも知れませんし, その共有メモリを使うのはどういうプログラムであるか、 いくつのプロセスがそれを同時に使うのかとか。 一応どんな場合でも共通と思うのは,ある程度の大きさを 一度にまとめてとる必要があることです。 malloc()を使う場合は数バイトのを沢山とっても あまり気にする必要はありませんが、共有メモリの場合は そうはいきません。 たとえば、256Kbyte領域をとって、その中を自分で 管理して使う、つまり、malloc(),free()に相当する ことを自分でやる必要があります。 まあ、固定の大きさのテーブルをとるなら、そこまで やる必要はありませんけど。 これは、共有メモリを管理するのはOSにとっては かなり負荷の大きいことによります。 だから、領域はまとめて少ない数を使う必要があるわけです。
お礼
有難う御座いました。 非常に勉強になりました。 又、解らない事があった時は宜しくお願いします。