メインコンテンツまでスキップ
Knowledgebase
Home
Renesas Electronics Japan - Knowledgebase

メモリブロックプールの使用に関するFAQ

最終更新日:2017/07/05

質問1.メモリブロックプールとは何ですか?

回答
メモリブロックプールとは、固定長のメモリブロックが配置された領域のことで、高速にメモリを割り当てるために使用することができます。

質問2.メモリブロックプールのメリットは何ですか?

回答
メモリブロックプールは固定長のブロックで構成されているため、フラグメンテーション(断片化)の問題が発生しません。
フラグメンテーションは、本来非決定的な動作の原因になります。さらに、固定長のメモリブロックの割り当てと解放に必要な時間は、単純な連結リストの操作の時間と同等です。
さらに、メモリブロックの割り当てと解放は、利用可能なリストの先頭で実行されます。
その結果、最も速く実行可能な連結リストの処理を実現し、実際のメモリブロックをキャッシュに保持するのに役立ちます。

質問3.メモリブロックプールのデメリットは何ですか?

回答
柔軟性に欠けることが、固定長メモリプールの主なデメリットです。ブロックサイズは、ユーザの最低限のメモリ要求に十分対応できる大きさにする必要があります。
もちろん、同じプールに対してサイズの異なる数多くのメモリ要求があると、メモリが無駄に使われます。
解決策の一つは、サイズが異なるメモリブロックで構成される、複数のメモリブロックプールを準備することです。

質問4.メモリブロックプールはどのように生成されるのでしょうか?

回答
メモリブロックプールは、初期化中またはアプリケーションスレッドによるランタイム中に生成されます。
アプリケーション内のメモリブロックプールの数に制限はありません。

質問5.ブロックのサイズはどのように指定されるのでしょうか?

回答
前述のとおり、メモリブロックプールは、固定長の複数のブロックで構成されます。ブロックサイズ(単位:バイト)は、プール生成中に指定されます。
ThreadXは、プール内の各メモリブロックに少量のオーバヘッド(Cポインタサイズ)を追加します。
またThreadXは、各メモリブロックの先頭の位置合わせを適切に行うために、ブロックサイズを補充することがあります。

質問6.メモリブロックプールの容量は?

回答
1つのプール内のメモリブロックの数は、ブロックサイズのバイト数と、生成中に提供されるメモリ領域の総バイト数との関係で決まります。
プールの容量(ブロック数)は、提供されたメモリ領域の総バイト数を、ブロックサイズ(補充とポインタオーバヘッドのバイト数を含む)で割ることで求められます。

質問7.スレッドが、すでに一杯になったメモリブロックプールからの割り当てを行おうとするとどうなりますか?

回答
アプリケーションスレッドは、空のプールからのメモリブロックを待ちながら中断できます。ブロックがプールに返されると、中断していたスレッドにそのブロックが与えられ、そのスレッドが再開します。
複数のスレッドが同じメモリブロックプールで中断している場合、スレッドは中断をはじめた順序(FIFO)で再開されます。ただし、スレッドの中断を解除するブロック解放コール前に、アプリケーションがtx_block_pool_prioritizeを呼び出すと、優先的な再開(リザンプション)も可能です。ブロックプールが優先順位を付ける処理によって、中断リストの先頭に最高優先度スレッドが配置され、他の中断スレッドはすべて同じFIFOの順番のままとなります。

質問8.さらに詳しい情報はどこにありますか?

回答
さらに詳しい情報は、ThreadXユーザマニュアルをご参照ください。

©1997-2016 Express Logic, Inc. All rights reserved.本文書と関連するThreadXソフトウェアは、Express Logic, Inc.の独占所有物です。各々にExpress Logic, Inc.の専有情報が含まれています。

 

適用製品

Renesas Synergy™ プラットフォーム
Renesas Synergy™ ソフトウェア