忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2025/05/18

ゆったりですが続くよ

本当にどうなってんのっていう寒さに体がついていきません。
運動しなきゃなぁ…。

皆さん突然の運動によるぎっくり腰には注意しましょうね。


はい、というわけで手作りアロケータ続きやっていきます。

メモリ確保のNew機能を実装しましょう。手順としては
1、メモリから空き要素を探す
2、空き要素を必要な分だけ使用中にする。
はい、これだけです。

んで、ここで問題です。ここでいうメモリはどこにあるんでしょうね。
この場合の正解は「どこにもない」です。作ってないですからね。
なのでまずメモリを作りましょう。

プログラム
namespace Allocater{
 
 class MemoryPool{
 private:
  void* memoryPool;
  uint memoryPoolSize;
  
 public:
  // ポインタのNULL初期化は忘れない事。
  MemoryPool() : memoryPool(NULL){}
  // 解放忘れてたら教えてもらう。
  ~MemoryPool()
  {
   if( memoryPool ){
    DEBUG_ERROR_PRINT("解放忘れ!");
   }
  }
  
  // メモリを確保する
  void Init(uint size)
  {
   // どこかで使っているかもしれないので解放しない
   // NULLのときだけ確保を許可する
   if( memoryPool == NULL ){
    memoryPoolSize = size;
    memoryPool = malloc(size);
   }
  };
  // メモリを解放する
  void Release()
  {
   if( memoryPool ){
    memoryPoolSize = 0;
    free( memoryPool );
    memoryPool = NULL;
   }
  }
 };
 
}/* Allocater */

おおざっぱにはこれだけです。
あ、DEBUG_ERROR_PRINT関数は適当です。
自作関数なりシステム関数なり使ってくださいね。

大きなメモリを確保するためだけに作ってます。
このクラスに空き要素を探してもらって、確保していくようにします。

あああストーブが消えた。
おやすみなさい。



前の記事

拍手[0回]

PR

2014/12/18 プログラム Comment(0)

COMMENT

COMMENT FORM

NAME
MAIL
WEB
TITLE
COMMENT
PASSWORD

プロフィール
 
HN:
ユニ
性別:
男性
 
 
カテゴリー
 
 
 
最新記事
 
(03/09)
(10/27)
(08/09)
(07/15)
(06/02)