[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3176] from OSASK BOARD



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい。


http://www.imasy.or.jp/~mone/osask/index.cgi?REFER=3c65ddb2_9d4f

From: 川合秀実
Message-ID: 3c65ddb2_9d4f
Date: 2002/02/10 11:40
Subject: Re: nikq::osask

[OSASK 3174]へのレスです。

>別に.textじゃなくて定数専用セグメントでもいいと思いますが、
>せっかく仮想記憶なんで、定数に誤って書き込まないように
>書込み禁止にしておきたいですよね。

  この定数専用セクション(たとえば.cdata)などを用意するのが最善でしょう。
これを.text側にコンバインしても、.data側にコンバインしてもよくて、それは
リンカーに任せられますから。

>textはとりあえず両方実現できるんで悪くないと思いますが。

  そのとおりです。フラットモデルにおいて、.textに定数を置くというのはい
いセンスだと僕も思います。僕が[OSASK 3166]で不支持を表明したのは、.text
に置くことの是非ではなく、「.dataに置くことが間違っている」という指摘に
対してだけです。これが「フラットモデルにおいては.textに置く方がよいと思
う」のようなご発言でしたら、僕は素直に賛成したでしょう。

>これは特に、複数の値が同じ定数をひとつにまとめたときには
>重要じゃないですか。全然関係ない変数にまで影響が及びますから。

  もし.cdataのように別のセクションになっていれば、OSASKでもこの保護を付
けることができます。ただページングで保護しなければいけないので、セクショ
ンを4KBアラインしなければならず、コンパクトなプログラムではメモリ空間の
浪費になってしまうかもしれませんが。

>もうひとつは、同じプログラムを複数起動した時に定数領域は
>変更しないので同じメモリを共有したいですよね。
>(この場合にも書込み禁止が重要です)

  OSASKでは既にこの仕様の元に動いています。定数値や初期値のイメージは簡
単なアルゴリズムの圧縮がかけられ、.textの中に納まっています。これをスタ
ートアップルーチンがデーターセグメント内に展開してから、main()に分岐して
います。展開後は同じメモリを共有してはいませんが(.cdata等がなく区別でき
なかったので)、圧縮データーについては共有しているわけです。