[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等がなく区別でき
なかったので)、圧縮データーについては共有しているわけです。