Max 5 API Reference

メモリ割り当て

Max API では、クロスプラットフォームなメモリ管理呼び出しを提供しています。

呼び出しには、ポインタ用、およびハンドル用の2つのタイプがあります。ハンドルはポインタへのポインタで、参照を変更せずにメモリの再割り当てができるように、初期の MacOS で使用されていました。そして、多くの MacOS の API 呼び出しではハンドルが使用されています。同様に、いくつかの古いタイプの Max API 呼び出しでもハンドルを使用していますが、一般的には、OS や Max がハンドルの使用を要求するのでない限り、よりシンプルなポインタを使用するほうが良いでしょう。

これまで長い間、Max オブジェクトのプログラマは、メモリ呼び出しに getbytes()freebytes() を使ってきたことと思います。しかし、現在ではすべてのメモリ呼び出しは、OS のメカニズムを基にしたものを同様に使用しています。現在でも getbytes()freebytes() はサポートされていますが、これらは使用するアーギュメントのために 32KB あるいはそれ以下のメモリに制限されてしまいます。そのため、 代わりに sysmem_newptr()sysmem_freeptr() の使用を推奨します。

次の例では、ポインタとハンドルにメモリを割り当て、開放しています。

        char *ptr;
        char **hand;

        ptr = sysmem_newptr(2000);
        post("I have a pointer %lx and it is %ld bytes in size",ptr, sysmem_ptrsize(ptr));
        ptr = sysmem_resizeptrclear(ptr, 3000);
        post("Now I have a pointer %lx and it is %ld bytes in size",ptr, sysmem_ptrsize(ptr));
        sysmem_freeptr(ptr);

        hand = sysmem_newhandle(2000);
        post("I have a handle %lx and it is %ld bytes in size",hand, sysmem_handlesize(hand));
        sysmem_resizehandle(hand, 3000);
        post("Now the handle %lx is %ld bytes in size",hand, sysmem_ptrsize(hand));
        sysmem_freehandle(hand);

Copyright © 2008, Cycling '74