PB 電子会議室
カテゴリ:ユーザオブジェクト
日付:2001年02月09日 22:02 発信者:M.M
題名:RE(17):PB6.5: String型変数のメモリアロケートについて
M.M@Takaさんに壊れかけていると言われてしまったが、少し復旧してきたところ、です。
Takaさん、ryochanさん、お久しぶりです。
>ここで、ポインタについて面白い実験をしてみました。
>(今回の件とは無関係ですけど)
>PBのスクリプトで、宣言した変数のアドレスを強引に取得する方法として
>lstrcatAを使う方法が紹介されています。
>これを使って、datastore型の変数のアドレスを拾ってみました。
>...
>ところが、同じことをstring型や 動的配列の変数で実験すると、
>毎回違う値を返してきます。
>ということは、サイズが変わる可能性のある変数の場合は、
>代入文やref引数で受け渡しする際、PBが内部的に(勝手に)
>新しい領域を確保し直していると思われます。
String型の変数や動的配列の変数では、サイズが変わるたびに毎回
新しい領域を確保するという動きをしています。以前に何かの技術
資料で読んだような記憶があります。
以前に父メールの初期バージョンで、動作が無茶苦茶遅かった原因
はこれでした。(あの時は動的なBlob型も絡んでいたような気もする
けど...。PB User\'s MLを読んでない人、すみません)
PB6.x以降ではだいぶ改善されているようですが、PB5.xまででは、
String型で遅い場合はCharの固定配列を使用したり、動的配列の
変数の処理で遅い場合は、大きめの固定配列を宣言するという手法
が、レスポンス改善の手段として極めて有効でした。
>これがPBのクセだと言ってしまえばそれまでですが、C/C++などで
>ポインタの扱いに慣れている方にとっては悩ましいところですね。
確かに...。日本のPowerBuilderユーザカンファレンスは1回で終わ
ってしまったし、内部情報を理解する機会が減りつつありますね。
付加情報:
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.