アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして!
今、テーブル展開について非常に悩んでいます。
ファイルに記述されている文字列(可変長)を
共有メモリに展開するにはどうしたらいいのか
知っている方がいらしたら教えてもらえませんか?
ちなみに言語はC言語です。
宜しくお願いします。

A 回答 (2件)

勘違いしてたらゴメンナサイ。


テーブル展開でお悩みとは、要するに可変長列/可変長行のファイルの内容をメモリ上に展開したいがどういうデータ構造にすれば良いか?という意味ですか?
多次元の可変長データならリスト構造が定石かなぁ?
ファイルから1行読んだ後、lengthを取って見合う長さのエリアをallocし、そこにstrcpy、さらにリスト構造体をallocしてそこに前述の文字列の先頭ポインタを代入、次行以降これを繰り返してリスト構造体を繋げていく。
1charづつリスト構造体に入れて2次元リストにする手もありますが、1行分の文字列の登録/抽出処理が面倒になるので、行方向は1本の文字列として上記の様にlengthを見てallocしてしまうのが簡単かと。
こんな文章ではイメージできない!(もっともだ)様でしたら、下記URLなどを参考にして下さい。
最後に、リスト構造はゴミ掃除が大変なのでご注意を。

参考URL:http://www.st.rim.or.jp/~phinloda/cqa/cqa4.html# …
    • good
    • 0
この回答へのお礼

有難う御座いました。
非常に勉強になりました。
又、解らない事があった時は宜しくお願いします。

お礼日時:2001/07/28 16:12

用途によっていろいろやり方があると思うので,


何をしたいかによると思います。

文字列が可変長でも文字列の数が固定かどうかとか、
あとで中身を別の物に長さも変えて入れるかどうかとか、
…。

また、共有メモリを使う場合、単一の領域のみ使うか,
複数使ってもよいか、大きさはどのぐらいにするかでも
違ってくると思います。

OSによっても多少事情がことなるかも知れませんし,
その共有メモリを使うのはどういうプログラムであるか、
いくつのプロセスがそれを同時に使うのかとか。


一応どんな場合でも共通と思うのは,ある程度の大きさを
一度にまとめてとる必要があることです。
malloc()を使う場合は数バイトのを沢山とっても
あまり気にする必要はありませんが、共有メモリの場合は
そうはいきません。
たとえば、256Kbyte領域をとって、その中を自分で
管理して使う、つまり、malloc(),free()に相当する
ことを自分でやる必要があります。
まあ、固定の大きさのテーブルをとるなら、そこまで
やる必要はありませんけど。

これは、共有メモリを管理するのはOSにとっては
かなり負荷の大きいことによります。
だから、領域はまとめて少ない数を使う必要があるわけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!