Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Palm OS Programmer's API Reference/42

← 41 章に戻る ↑トップへ 43 章に進む →?


42 メモリ マネージャ

この章の索引


この章ではメモリ マネージャについて説明します。メモリ マネージャ API は、ヘッダ ファイル MemoryMgr.h で宣言されます。メモリ マネージャについての追加情報は、Palm OS Programmer's Companion, vol. I「メモリ」 の章を参照してください。

メモリ マネージャ関数 ^TOP^

MemCardInfo 関数 ^TOP^

目的

メモリ カードについての情報を返します。

宣言されている場所

MemoryMgr.h

Prototype

Err MemCardInfo (
	UInt16 cardNo,
	Char *cardNameP,
	Char *manufNameP,
	UInt16 *versionP,
	UInt32 *crDateP,
	UInt32 *romSizeP,
	UInt32 *ramSizeP,
	UInt32 *freeBytesP
)

パラメータ

  • cardNo
    • カード ナンバ
  • cardNameP
    • 文字配列(32バイト)へのポインタ、または 0
  • manufNameP
    • 文字配列(32バイト)へのポインタ、または 0
  • versionP
    • 変数へのポインタ、または 0
  • crDateP
    • 作成日へのポインタ、または 0
  • romSizeP
    • ROM サイズ変数へのポインタ、または 0
  • ramSizeP
    • RAM サイズ変数へのポインタ、または 0
  • freeBytesP
    • バイト数の変数へのポインタ、または 0

返り値

エラーが無ければ 0 を返します。

コメント

反映させたくないパラメータ変数には 0 を渡してください。

MemCmp 関数 ^TOP^

目的

2 つのメモリ ブロックを比較します。


NOOTE: ブロックは符号なしバイトとして比較されます。


宣言されている場所

MemoryMgr.h

Prototype

Int16 MemCmp (
	const void *s1,
	const void *s2,
	Int32 numBytes
)

パラメータ

  • s1, s2
    • メモリ ブロックへのポインタ
  • numBytes
    • 比較するバイト数

返り値

一致した場合 0、一致しない場合は:

s1 > s2 ならば、+

s1 < s2 ならば、-

互換性

2.0 New Feature Set が満たされる場合にのみ、実装されます。

MemCmp は、MemCmp をサポートするすべてのバージョンで、メモリ上のブロックの等価性をテストするのに使用できます。しかしながら、メモリ上のブロックのソート順(sort ordering)のテストとして使用する場合、Palm OS バージョン 3.5 以降でなければ信頼できません。バージョン 3.2 以前では、MemCmp は 2 つのブロックが一致しなければ常に + を返します。バージョン 3.2 と 3.3 では、MemCmp は、文字の相違が 128 箇所以下であれば、s1 > s2 のとき + を返し、s1 < s2 のとき - を返し、それを信頼することができます。相違が 128 箇所を超える場合は、MemCmp は - を返すべきときに + を返すかもしれませんし、逆も同様です。

MemDebugMode 関数 ^TOP^

目的

メモリ マネージャの現在のデバッグ モードを返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemDebugMode (
	void
)

パラメータ

パラメータはありません。

返り値

MemSetDebugMode() で説明されているデバッグ フラグを返します。

MemHandleCardNo 関数 ^TOP^

目的

チャンクが存在しているカード ナンバを返します。

Prototype

UInt16 MemHandleCardNo (
	MemHandle h
)

パラメータ

  • → h
    • チャンク ハンドル

返り値

カード ナンバを返します。

コメント

可動チャンクが存在しているカード ナンバ(0 または 1)を検索するためにこのルーチンを呼び出します。

参照

MemPtrCardNo()

MemHandleDataStorage 関数 ^TOP^

目的

与えられたハンドルがデータ ストレージ ヒープの一部であれば true を返します。そうでない場合は、ダイナミック ヒープに存在するハンドルです。

宣言されている場所

MemoryMgr.h

Prototype

Boolean MemHandleDataStorage (
	MemHandle h
)

パラメータ

  • → h
    • チャンク ハンドル

返り値

ハンドルがデータ ストレージ ヒープの一部であれば、true を返します。

コメント

テキスト フィールドを編集するときにデータ ストレージの Write プロテクトに気を配る必要があるかどうか確認するために、フィールド パッケージ ルーチンによって呼び出されます。

参照

MemPtrDataStorage()

MemHandleFree 関数 ^TOP^

目的

可動チャンクの処分を行います。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHandleFree (
	MemHandle h
)

パラメータ

  • → h
    • チャンク ハンドル

返り値

エラーが無ければ 0 を返します。エラーが起こった場合は、memErrInvalidParam を返します。

コメント

可動チャンクを処分するためにこのルーチンを呼び出します。

参照

MemHandleNew()

MemHandleHeapID 関数 ^TOP^

目的

チャンクのヒープ ID を返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemHandleHeapID (
	MemHandle h
)

パラメータ

  • → h
    • チャンク ハンドル

返り値

チャンクのヒープ ID を返します。

コメント

チャンクが存在するヒープのヒープ ID を取得するためにこのルーチンを呼び出します。

参照

MemPtrHeapID()

MemHandleLock 関数 ^TOP^

目的

チャンクをロックし、チャンクのデータへのポインタを取得します。

宣言されている場所

MemoryMgr.h

Prototype

MemPtr MemHandleLock (
	MemHandle h
)

パラメータ

  • → h
    • チャンク ハンドル

返り値

チャンクへのポインタを返します。

コメント

チャンクをロックし、チャンクへのポインタを取得するためにこのルーチンを呼び出します。

参照

MemHandleNew(), MemHandleUnlock()

MemHandleNew 関数 ^TOP^

目的

ダイナミック ヒープ内部の新しい可動チャンクを割り当て、そのチャンクへのハンドルを返します。

宣言されている場所

MemoryMgr.h

Prototype

MemHandle MemHandleNew (
	UInt32 size
)

パラメータ

  • → size
    • 希望するチャンクのサイズ

返り値

新しいチャンクへのハンドルを返します。失敗した場合は 0 を返します。

コメント

ダイナミック メモリを割り当てるためにこのルーチンを呼び出します。MemHandleNew が割り当てたメモリ チャンクにデータを書き込む前に、 MemHandleLock() を呼び出して、チャンクのロックとそのチャンクへのポインタの取得を行う必要があります。

参照

MemPtrFree(), MemPtrNew(), MemHandleFree(), MemHandleLock()

MemHandleResize 関数 ^TOP^

目的

チャンクをリサイズします。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHandleResize (
	MemHandle h,
	UInt32 newSize
)

パラメータ

  • → h
    • チャンク ハンドル
  • → newSize
    • 希望する新しいサイズ

返り値

  • 0
    • エラーなし
  • memErrInvalidParam
    • 不適切なパラメータを渡された
  • memErrNotEnoughSpace
    • ヒープにチャンクを大きくするだけの十分なスペースがない
  • memErrChunkLockes
    • チャンクがロックされているため、チャンクを大きくすることができない

コメント

チャンクをリサイズするためにこのルーチンを呼び出します。チャンクのサイズを小さくする場合は、たとえチャンクがロックされていても、常にこのルーチンは成功します。チャンクを大きくする場合、このルーチンは、まず、チャンクのすぐ後に領域を作成しようとします。それが成功すると、チャンクを動かす必要はありません。チャンクをヒープの他の場所に動かす必要がある場合は、そのチャンクは可動で、かつ、ロック カウントは 0 でなくてはなりません。

Palm OS バージョン 2.0 以前を走らせているデバイスでは、MemHandleResize 関数はヒープの同じ場所でチャンクをリサイズしようとするだけです。しかし、 dmResizeRecord() は、元のヒープに十分なスペースがない場合、他の場所を探します。

参照

MemHandleNew(), MemHandleSize()

MemHandleSetOwner 関数 ^TOP^

目的

チャンクの所有者 ID をセットします。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHandleSetOwner (
	MemHandle h,
	UInt16 owner
)

パラメータ

  • → h
    • チャンク ハンドル
  • → owner
    • チャンクの新しい所有者のID。OS をオーナーにする場合は 0 をセットします。

コメント

SysUIAppSwitch()|Palm OS Programmer's API Reference/54 または SysAPPLaunch()|Palm OS Programmer's API Reference/54 に渡すパラメータ ブロックを割り当てる場合は、パラメータ ブロック チャンクの所有権を OS に付与するために MemPtrSetOwner() を呼び出さなくてはなりません。(元々の所有者はアプリケーションになっています。)これらのチャンクの所有権を変更しないと、実行中のアプリケーションがそれらを使用する機会を得る前に、それらは解放されてしまうでしょう。


重要: 一旦、メモリ チャンクの所有権を OS に付与した場合、そのチャンクを解放しようとしてはいけません。OS が、SysUIAppSwitch() または SysAppLaunch() と共に呼び出されたアプリケーションが停止すると、それを解放するでしょう。


MemHandleSize 関数 ^TOP^

目的

チャンクの要求されたサイズを返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt32 MemHandleSize (
	MemHandle h
)

パラメータ

  • → h
  • チャンク ハンドル

返り値

チャンクの要求されたサイズを返します。

コメント

要求されたチャンクの元々のサイズを取得するためにこのルーチンを呼び出します。

参照

MemHandleResize()

MemHandleToLocalID 関数 ^TOP^

目的

ハンドルを、カード関連のローカル チャンク ID に変換します。

宣言されている場所

MemoryMgr.h

Prototype

LocalID MemHandleToLocalID (
	MemHandle h
)

パラメータ

  • → h
    • チャンク ハンドル

返り値

ローカル ID を返します。失敗した場合は NULL (0) を返します。

コメント

チャンク ハンドルをローカル ID に変換するためにこのルーチンを呼び出します。

参照

MemLocalIDToGlobal(), MemLocalIDToLockedPtr()

MemHandleUnlock 関数 ^TOP^

目的

チャンク ハンドルによって与えられたチャンクのロックを解除します。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHandleUnlock (
	MemHandle h
)

パラメータ

  • → h
    • チャンク ハンドル

返り値

  • 0
    • エラーなし
  • memErrInvalidParam
    • 不適切なパラメータが渡された

コメント

チャンクのロック カウントを減らすためにこのルーチンを呼び出します。

MemHandleLockMemHandleUnlock はペアにして使用すべきです。

参照

MemHandleLock()

MemHeapCheck 関数 ^TOP^

目的

与えられたヒープの正当性をチェックします。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHeapCheck (
	UInt16 heapID
)

パラメータ

  • heapID
    • チェックするヒープの ID

返り値

エラーが無ければ 0 を返します。

参照

MemDebugMode(), MemSetDebugMode()

MemHeapCompact 関数 ^TOP^

目的

ヒープを圧縮します。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHeapCompact (
	UInt16 heapID
)

パラメータ

  • heapID
    • 圧縮するヒープの ID

返り値

常に 0 を返します。

コメント

大部分のアプリケーションは、明示的にこの関数を呼び出すことはしません。システム ソフトウェアがこの関数をさまざまなタイミングで呼び出します。例えば、メモリ アロケーションの最中(十分な領域がない場合に)や、システム再起動の最中です。

ヒープを圧縮し、空になった容量をマージするためにこのルーチンを呼び出します。このルーチンは、すべての可動チャンクをヒープの先頭に移動させ、空になったすべての容量をヒープの中央にマージしようとします。

MemHeapDynamic 関数 ^TOP^

目的

与えられたヒープがダイナミック ヒープの場合に、true を返します。

宣言されている場所

MemoryMgr.h

Prototype

Boolean MemHeapDynamic (
	UInt16 heapID
)

パラメータ

  • heapID
    • テストするヒープの ID

返り値

ダイナミックなら true を、そうでなければ false を返します。

コメント

ダイナミック ヒープは揮発性記憶装置、アプリケーション スタック、globals(訳者注: グローバル変数?)、およびダイナミックに割り当てられたメモリに使用されます。


NOTE: Palm OS 3.5 では、ダイナミック ヒープのサイズは利用可能なメモリの量に基づきます。一般的に、以前よりも大きなサイズになります。


参照

MemNumHeaps(), MemHeapID()

MemHeapFlags 関数 ^TOP^

目的

ヒープのヒープ フラグを返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemHeapFlags (
	UInt16 heapID
)

パラメータ

  • → heapID
    • ヒープの ID

返り値

ヒープ フラグを返します。

コメント

ヒープのヒープ フラグを検索するためにこのルーチンを呼び出します。フラグを調べることで、ヒープ が ROM ベースかそうでないかが分かります。ROM ベースのヒープは memHeapFlagReadOnly ビット セットを持っています。(memHeapFlagReadOnly マスクの値は 0x0001 です。)

参照

MemNumHeap(), MemHeapID()

MemHeapFreeBytes 関数 ^TOP^

目的

ヒープ内部の空のバイト数と、ヒープ内部の空のチャンクの最大サイズを返します。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHeapFreeBytes (
	UInt16 heapID,
	UInt32 *freeP,
	UInt32 *maxP
)

パラメータ

  • → heapID
    • ヒープの ID
  • ←→ freeP
    • 空のバイト数を表す UInt32 型変数へのポインタ
  • ←→ maxP
    • 空のチャンクの最大サイズを表す UInt32 型変数へのポインタ

返り値

常に 0 を返します。

コメント

このルーチンは、ヒープの圧縮を行いませんが、あらかじめ割り当て要求が成功するかどうか決定するのに使用されるかもしれません。メモリの割り当てを行う前に、この関数を呼び出し、maxP で返される値を確認し、割り当て要求を満たすのに十分な空き容量があるかどうか確認してください。空き容量が足りない場合は、MemHeapCompact() 関数を呼び出すことで使用可能な空き容量を増やせるかもしれません。MemPtrNew()MemHandleNew() は両方とも、必要があれば、自動的にヒープの圧縮を行うということを覚えておいてください。

参照

MemHeapSize(), MemHeapID(), MemHeapCompact()

MemHeapID 関数 ^TOP^

目的

与えれたヒープのインデックスとカード番号から、ヒープの ID を返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemHeapID (
	UInt16 cardNo,
	UInt16 heapIndex
)

パラメータ

  • → cardNo
    • カード番号(0 または 1 のどちらか)
  • → heapIndex
    • ヒープ インデックス(0 から MemNumHeaps() - 1 までの値のうちのいずれか)

返り値

ヒープ ID を返します。

コメント

ヒープ インデックスとカード番号から、ヒープのヒープ ID を検索するためにこの関数を呼び出します。ヒープ ID は、ヒープのサイズ、空き容量などのヒープ 情報を得るために使われます。また、ヒープを操作するルーチンのどれかに渡されます。

参照

MemNumHeaps()

MemHeapScramble 関数 ^TOP^

目的

指定されたヒープを退避させます。

宣言されている場所

MemoryMgr.h

Prototype

Err MemHeapScramble (
	UInt16 heapID
)

パラメータ

  • headID
    • 退避させるヒープの ID

コメント

システムは、それぞれの可動チャンクを動かそうと試みます。

デバッグの役に立ちます。

返り値

常に 0 を返します。

参照

MemDebugMode(), MemSetDebugMode()

MemHeapSize 関数 ^TOP^

目的

ヒープ ヘッダを含むヒープのトータル サイズを返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt32 MemHeapSize (
	UInt16 heapID
)

パラメータ

  • → heapID
    • ヒープの ID

返り値

ヒープのトータル サイズを返します。

参照

MemHeapFreeBytes(),

MemLocalIDKind 関数 ^TOP^

目的

ローカル ID がハンドルまたはポインタを参照しているかどうかを返します。

宣言されている場所

MemoryMgr.h

Prototype

LocalIDKind MemLocalIDKind (
	LocalID local
)

パラメータ

  • → local
    • 問い合わせするローカル ID

返り値

LocalIDKind または memIDHandle または memIDPtr を返します。(MemoryMgr.h を参照してください)

コメント

このルーチンは、与えられたローカル ID の参照先が不可動チャンク(memIDPtr)か可動チャンク(memIDHandle)かを判定します。

MemLocalIDToGlobal 関数 ^TOP^

目的

カード関連のローカル ID を、指定されたカード内部のグローバル ポインタに変換します。

宣言されている場所

MemoryMgr.h

Prototype

MemPtr MemLocalIDToGlobal (
	LocalID local,
	UInt16 cardNo
)

パラメータ

  • → local
    • 変換するローカル ID
  • → cardNo
    • チャンクが存在しているメモリ カード

返り値

チャンクへのポインタまたはハンドルを返します。

参照

MemLocalIDKind(), MemLocalIDToLockedPtr()

MemLocalIDToLockedPtr 関数 ^TOP^

目的

与えられたローカル ID とカード番号から、チャンクへのポインタを返します。

ローカル ID が可動チャンク ハンドルを参照している場合は、このルーチンは、返り値を返す前に、自動的にチャンクをロックします。

宣言されている場所

MemoryMgr.h

Prototype

MemPtr MemLocalIDToLockedPtr (
	LocalID local,
	UInt16 cardNo
)

パラメータ

  • local
    • ローカル チャンク ID
  • cardNo
    • カード番号

返り値

チャンクへのポインタを返します。エラーが起きた場合は 0 を返します。

参照

MemLocalIDToGlobal(), MemLocalIDToPtr(), MemLocalIDKind(), MemPtrToLocalID(), MemHandleToLocalID()

MemLocalIDToPtr 関数 ^TOP^

目的

与えられたローカル ID とカード番号から、チャンクへのポインタを返します。

宣言されている場所

MemoryMgr.h

Prototype

MemPtr MemLocalIDToPtr (
	LocalID local,
	UInt16 cardNo
)

パラメータ

  • local
    • ローカル チャンク ID
  • cardNo
    • カード番号

返り値

チャンクへのポインタを返します。エラーが起きた場合は 0 を返します。

コメント

ローカル ID がロックされていない可動チャンクを参照している場合、この関数はエラーを意味する 0 を返します。

参照

MemLocalIDToGlobal(), MemLocalIDToLockedPtr()

MemMove 関数 ^TOP^

目的

ダイナミック ヒープ内部のある場所から他の場所へ、バイト数をコピーします。

宣言されている場所

MemoryMgr.h

Prototype

Err MemMove (
	void *destP,
	const void *sourceP,
	Int32 numBytes
)

パラメータ

  • destP
    • コピー先へのポインタ
  • sourceP
    • コピー元へのポインタ
  • numBytes
    • 移動するバイト数

返り値

常に 0 を返します。

コメント

ISO C ライブラリが memmove を呼び出すように、この関数はsourcePで指定されたオブジェクトをdestPで指定されたオブジェクトにコピーします。コピー元とコピー先は重なるかもしれません。コピーは常に非破壊方法(訳者注: non-destructive manner??)で行われます。

データ ヒープがコピー先の場合の操作に関しては、 DmSet(), DmWrite(), 関連の関数を参照してください。

MemNumCards 関数 ^TOP^

目的

システムのカード スロット数を返します。すべてのスロットが数えられる必要はありません。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemNumCards (
	void
)

パラメータ

ありません。

返り値

システムのスロット数を返します。

MemNumHeaps 関数 ^TOP^

目的

指定されたカードの利用可能なヒープ数を返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemNumHeaps (
	UInt16 cardNo
)

パラメータ

  • → cardNo
    • カード番号。0 または 1 のどちらかです。

返り値

ROM ベースと RAM ベースのヒープを含む利用可能なヒープ数を返します。

コメント

メモリ カード上のヒープの総数を調べるためにこの関数を呼び出します。各ヒープの情報は、ヒープ ID を使って MemHeapSize(), MemHeapFreeBytes(), MemHeapFlags() を呼び出すことで、得ることができます。ヒープ ID は、カード番号とヒープ インデックスを使って MemHeapID() を呼び出すことで、得られます。ヒープ インデックスは 0 から MemNumHeaps までのいずれかの値です。

MemNumRAMHeaps 関数 ^TOP^

目的

与えられたカード内部の RAM ヒープの数を返します。

宣言されている場所

MemoryMgr.h

Prototyoe

UInt16 MemNumRAMHeaps (
	UInt16 cardNo
)

パラメータ

  • cardNo
    • カード番号

返り値

RAM ヒープの数を返します。

参照

MemNumCards()

MemPtrCardNo 関数 ^TOP^

目的

不可動チャンクが存在しているカード 番号(0 または 1)を返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemPtrCardNo (
	MemPtr p
)

パラメータ

  • → p
    • チャンクへのポインタ

返り値

カード番号を返します。

参照

MemHandleCardNo()

MemPtrDataStorage 関数 ^TOP^

目的

与えられたポインタがデータ ストレージ ヒープの一部なら true を返します。そうでない場合は、ポインタはダイナミック ヒープにあることになります。

宣言されている場所

MemoryMgr.h

Prototype

Boolean MemPtrDataStorage (
	MemPtr p
)

パラメータ

  • p
    • チャンクへのポインタ

返り値

チャンクがデータ ストレージ ヒープの一部なら true を返します。

コメント

フィールド パッケージによって、フィールド パッケージがテキスト フィールドを編集するときにデータ ストレージ Write プロテクトに気を配る必要があるかどうか決定するために、呼び出されます。

参照

MemHeapDynamic()

MemPtrFree 関数 ^TOP^

目的

チャンクを処分します。

宣言されている場所

MemoryMgr.h

Prototype

#define MemPtrFree (
	p
)

パラメータ

  • → p
    • チャンクへのポインタ

返り値

エラーが無ければ 0 を、パラメータが不適切な場合は memErrInvalidParam を返します。

コメント

不可動チャンクを処分するためにこのルーチンを呼び出します。

MemPtrHeapID 関数 ^TOP^

目的

チャンクのヒープ ID を返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt16 MemPtrHeapID (
	MemPtr p
)

パラメータ

  • → p
    • チャンクへのポインタ

返り値

チャンクのヒープ ID を返します。

コメント

チャンクの存在しているヒープのヒープ ID を取得するためにこのルーチンを呼び出します。

MemPtrNew 関数 ^TOP^

目的

ダイナミック ヒープに新しい不可動チャンクを割り当てます。

宣言されている場所

MemoryMgr.h

Prototype

MemPtr MemPtrNew (
	UInt32 size
)

パラメータ

  • → size
    • 希望するチャンクのサイズ

返り値

新しいチャンクへのポインタを返します。失敗した場合は 0 を返します。

コメント

このルーチンは、ダイナミック ヒープに不可動チャンクを割り当て、そのチャンクへのポインタを返します。アプリケーションは、ダイナミック メモリを割り当てるとき、それを使うことができます。チャンクのサイズの範囲は 1 バイトから 64 キロバイトよりわずかに少ない範囲になることに注意してください。1 つのチャンクにこれより大きな領域を割り当てることはできません。

Palm OS 3.5 では、ダイナミック ヒープのサイズは利用可能なメモリの量に基づきます。一般に、前よりも大きくなります。


NOTE: 0 サイズの参照ブロックを割り当てることはできません。


参照

MemGluePtrNew()

MemPtrRecoverHandle 関数 ^TOP^

目的

データへの与えれたポインタから、可動チャンクのハンドルを回収(Recover)します。

宣言されている場所

MemoryMgr.h

Prototype

MemHandle MemPtrRecoverHandle (
	MemPtr p
)

パラメータ

  • → p
    • チャンクへのポインタ

返り値

チャンクへのハンドルを返します。失敗した場合は 0 を返します。

コメント

ROM または 不可動データ チャンクにあるポインタを使ってこの関数を呼び出さないでください。

MemPtrResize 関数 ^TOP^

目的

チャンクをリサイズします。

宣言されている場所

MemoryMgr.h

Prototype

Err MemPtrResize (
	MemPtr p,
	UInt32 newSize
)

パラメータ

  • → p
    • チャンクへのポインタ
  • → newSize
    • 希望する新しいサイズ

返り値

エラーが無ければ 0 を返します。エラーが起きた場合は、memErrNotEnoughSpace, memErrInvalidParam または memErrChunkLocked を返します。

コメント

ロックされたチャンクをリサイズするためにこのルーチンを呼び出します。このルーチンは、チャンクのサイズを小さくする場合は、常に成功します。チャンクを大きくする場合、チャンクのすぐ後ろの空き容量を使用しようと試みます。

参照

MemPtrSize(), MemHandleResize()

MemPtrSetOwner 関数 ^TOP^

目的

チャンクのオーナー ID をセットします。

宣言されている場所

MemoryMgr.h

Prototype

Err MemPtrSetOwner (
	MemPtr p,
	UInt16 owner
)

パラメータ

  • → p
    • チャンクへのポインタ
  • → owner
    • チャンクの新しいオーナー ID。OS をオーナーにする場合は 0 を指定します。

返り値

エラーが無ければ 0 を返します。エラーが起きた場合は、memErrInvalidParam を返します。

コメント

SysUIAppSwitch()|Palm OS Programmer's API Reference/54 または SysAPPLaunch()|Palm OS Programmer's API Reference/54 に渡すパラメータ ブロックを割り当てる場合は、パラメータ ブロック チャンクと、それに参照される他のすべてのチャンクの所有権を OS に付与するために MemPtrSetOwner() を呼び出さなくてはなりません。(元々の所有者はアプリケーションになっています。)ハンドルでいずれかのチャンクを参照するパラメータ ブロック構造体の場合にも、MemHandleSetOwner を呼び出して、ブロックの所有権を OS に付与しなくてはなりません。これらのチャンクの所有権を変更しないと、実行中のアプリケーションがそれらを使用する機会を得る前に、それらは解放されてしまうでしょう。


重要: 一旦、メモリ チャンクの所有権を OS に付与した場合、そのチャンクを解放しようとしてはいけません。OS が、SysUIAppSwitch() または SysAppLaunch() と共に呼び出されたアプリケーションが停止すると、それを解放するでしょう。


MemPtrSize 関数 ^TOP^

目的

チャンクのサイズを返します。

宣言されている場所

MemoryMgr.h

Prototype

UInt32 MemPtrSize (
	MemPtr p
)

パラメータ

  • → p
    • チャンクへのポインタ

返り値

要求されたチャンクのサイズを返します。

コメント

要求されたチャンクの元々のサイズを取得するために、このルーチンを呼び出します。

MemPtrToLocalID 関数 ^TOP^

目的

ポインタをカード関連のローカル チャンク ID に変換します。

宣言されている場所

MemoryMgr.h

Prototype

LocalID MemPtrToLocalID (
	MemPtr p
)

パラメータ

  • → p
    • チャンクへのポインタ

返り値

チャンクのローカル ID を返します。

コメント

チャンク ポインタをローカル ID に変換するために、この関数を呼び出します。

参照

MemLocalIDToPtr()

MemPtrUnlock 関数 ^TOP^

目的

与えられたチャンクへのポインタから、チャンクのロックを解除します。

宣言されている場所

MemoryMgr.h

Prototype

Err MemPtrUnlock (
	MemPtr p
)

パラメータ

  • p
    • チャンクへのポインタ

返り値

エラーが無ければ 0 を返します。エラーが起きた場合は memErrInvalidParam を返します。

コメント

チャンクのロックを解除する回数が、ロックされた回数より多くなってはいけません。

参照

MemHandleLock()

MemSet 関数 ^TOP^

目的

ダイナミック ヒープ内部の指定されたメモリ範囲を、指定された値にセットします。

Prototype

Err MemSet (
	void *dstP,
	Int32 numBytes,
	UInt8 value
)

パラメータ

  • dstP
    • 値をセットする場所へのポインタ
  • numBytes
    • セットするバイト数
  • value
    • セットする値

返り値

常に 0 を返します。

コメント

データ ヒープがセットする場所である場合の操作に関しては、 DmSet(), DmWrite(), 関連の関数を参照してください。

MemSetDebugMode 関数 ^TOP^

目的

メモリ マネージャのデバッグ モードをセットします。

宣言されている場所

MemoryMgr.h

Prototype

Err MemSetDebugMode (
	UInt16 flags
)

パラメータ

  • flags
    • デバッグ フラグ

コメント

以下のフラグを 1 つ使う、それ以上使う、1 つも使わない、いずれの場合も論理 OR 操作 ( | ) を使用してください。

  • memDebugModeCheckOnChange
  • memDebugModeCheckOnAll
  • memDebugModeScrambleOnChange
  • memDebugModeScrambleOnAll
  • memDebugModeFillFree
  • memDebugModeAllHeaps
  • memDebugModeRecordMinDynHeapFree

返り値

エラーが無ければ 0 を返します。エラーが起きた場合は -1 を返します。

MemStoreInfo 関数 ^TOP^

目的

メモリ カードの ROM または RAM のいずれかの情報を返します。

宣言されている場所

MemoryMgr.h

Prototype

Err MemStoreInfo (
	UInt16 cardNo,
	UInt16 storeNumber,
	UInt16 *versionP,
	UInt16 *flagsP,
	Char *nameP,
	UInt32 *crDateP,
	UInt32 *bckUpDateP,
	UInt32 *heapListOffsetP,
	UInt32 *initCodeOffset1P,
	UInt32 *initCodeOffset2P,
	LocalID *databaseDirIDP
)

パラメータ

  • → cardNo
    • カード番号。0 または 1 のいずれか
  • → storeNumber
    • 記憶装置番号。ROM ならば 0、RAM ならば 1
  • ←→ versionP
    • バージョン変数へのポインタ、または 0
  • ←→ flagsP
    • フラグ変数へのポインタ、または 0
  • ←→ nameP
    • 文字配列(32 バイト)へのポインタ、または 0
  • ←→ crDateP
    • 作成日付変数へのポインタ、または 0
  • ←→ bckUpDateP
    • バックアップ日付変数へのポインタ、または 0
  • ←→ heapListOffsetP
    • heapListOffset 変数へのポインタ、または 0
  • ←→ initCodeOffset1P
    • initCodeOffset1 へのポインタ、または 0
  • ←→ initCodeOffset2P
    • initCodeOffset2 へのポインタ、または 0
  • ←→ databaseDirIDP
    • データベース ディレクトリ チャンク ID 変数へのポインタ、または 0

返り値

エラーが無ければ 0 を返します。エラーが起きた場合は memErrCardNotPresent, memErrRAMOnlyCard または memErrInvalidStoreHeader を返します。

コメント

カードの ROM または RAM のどちらかの、いずれかまたはすべての情報を調べるためにこの関数を呼び出します。返り値を望まない変数には 0 を渡してください、


← 41 章に戻る ↑トップへ 43 章に進む →?