Renesas Synergy™

FAQ 104098 : malloc()、free()、new演算子の処理を早くする方法

Q: 質問

malloc()、free()、new演算子の処理を頻繁に繰り返すと、関数内での処理がだんだん遅くなってきます。処理を早くする方法はないでしょうか?


A: 回答

割り付けを繰り返すことによて空き領域のサイズ合計が、十分でも開き領域が小さな領域に分割(断片化)しているために処理速度が遅くなる場合が御座いま す。また新たに要求した大きなサイズの領域を確保できないという状況が生じる事もあります。このような状況を避けるために、以下の注意に従ってヒープ領域 を御使用下さい。

  1. サイズの大きな領域は、なるべくプログラムの実行開始直後に確保してください
  2. 開放してて再利用するデータ領域のサイズをなるべく一定にしてください。

またヒープ領域は、メモリ管理ライブラリー関数(calloc、malloc、realloc、new関数)によって割り付ける領域の合計です。その際にヒープ領域を1024バイト単位で管理いたします。

ヒープ領域として次の条件を満たす領域を確保してください。

HEAPSIZE = 1024 × n ( n≧1)

(メモリ管理ライブラリーによって割り付ける領域サイズ) + 管理領域サイズ ≦ HEAPSIZE

* 管理領域サイズは、1回の呼び出しのたびに管理用の領域として4バイト使用します。

詳細は、C/C++コンパイラ,アセンブラ,最適化リンケージエディタの9.2.1メモリ領域の割付をご参照ください。

 

 

適用製品

SuperHファミリ用C/C++コンパイラパッケージ
H8SX,H8S,H8ファミリ用C/C++コンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください