2006年02月01日

確保したヒープメモリの有効範囲

質問:

[PIMInfo->PIMAplWork]に設定したヒープはOUT中でも保持されるとの事ですが、 それ以外のポインタ(外部変数)等に確保したヒープは保持されないのでしょうか?サンプルで実験したところでは、問題なく保持されているようです。

PTR pDummy;

BOOLEAN PIMAplConstruct(PIMINFO *PIMInfo, USHORT InitLevel)
{
/* OUTワークの確保 */
if (!(pDummy = NewHeapPtr(1000)))
{
/* ヒープが確保できない場合は − 続行不可能 */
return false;
}
return true;
}

この様な方法で確保したヒープメモリが保持できない理由と、メモリの内容が破壊されるタイミングを教えて欲しい。

回答:

ヒープ領域の有効範囲については、確保した関数は関係ありません。ヒープ領域自体はアプリケーションプロセスが起動している間中、保持されます。従いまして、確保した領域へのハンドル、またはポインタを格納する変数に依存します。
PIMInfo->PIMAplWorkは、アプリケーションプロセスが起動している間中、保持されます。
PIMExecWork->PIMUserWorkは、アプリケーションがアクティブな間中、保持されます。アプリケーションがOUT状態になった時点で値は保証されなくなります(通常はOUT状態に移行する前にユーザが解放する必要がありますが、仮に解放しなくても値は保証されません)。
AplForm->UserWorkはフォームが表示されている間中、保持されます。他のフォームに切り替わった時点で値は保証されなくなります(通常はフォームが切り替わる前にユーザが解放する必要がありますが、仮に解放しなくても値は保証されません)。
その他の、例えばお客様がご指摘されているような外部変数についてはC言語の仕様に準じます。つまり外部変数の場合は、アプリケーションプロセスが起動している間中、保持されます。
posted by シンビアン at 20:12| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/12607877

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。