PB 電子会議室
カテゴリ:ユーザオブジェクト
日付:2001年02月11日 01:13 発信者:ryochan
題名:RE(19):PB6.5: 可変長データのメモリ格納機構(2)
続き
PBの様に自動でない言語は面倒くさそうですが
逆に現在のサイズより少ない
領域を確保してそれだけのデータを
転送させれば減らすことも可能なのです。
PBの場合、それはないので
動的配列では自動で転送(コピー+解放)
を行うことを利用して、
1.一時データを別の動的配列に待避する、
2.減らしたい動的配列=別の空の動的配列にして
(空のデータをコピーする)
減らしたい動的配列は空データとして
別の領域に移される。現在のデータは解放される。
3.待機させた、元のデータを減らしたい結果の要素分
格納する
方法がありますね。
メモリマネージャの機構にもよりますが
実際のメモリ(これまでメモリと言ってたのは仮想メモリです)
には確保した領域の両端に確保領域サイズ情報を
格納させるらしいです。
そうすると領域が開放されたときにもし隣接し合った領域が
空いていればそれらを足して一つのメモリの
空き空間とさせます。
メモリマネージャにこれだけ空いているよ
と知らせるためです。
その方法で、メモリの断片的な領域確保を
防ぐことができます。
ちなみに、構造体(クラスも)も順番に
データが並んでいますが
(でなければポインタで渡せませんよね)、
メンバに可変長データがある場合
Cでは可変長データのメンバについては
可変長データのポインタを
メンバとさせています。
なお、
Cのmalloc(新たに確保)、
realloc(再確保)、
calloc(新配列領域確保して新配列の要素はすべて0にする)、
はきちんと新たなアドレスを
返してくれるので
アドレスが変わっても心配は
ありません。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows98
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.