KMemManager.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. //
  4. // File: KMemManager.h
  5. // Date: 2000.08.08
  6. // Code: WangWei(Daphnis)
  7. // Desc: Header File
  8. //---------------------------------------------------------------------------
  9. #ifndef KMemManager_H
  10. #define KMemManager_H
  11. //---------------------------------------------------------------------------
  12. #include "KList.h"
  13. #include "KNode.h"
  14. //---------------------------------------------------------------------------
  15. class ENGINE_API KMemManager
  16. {
  17. private:
  18. struct KChunkHeader
  19. {
  20. KNode node;// node for link
  21. long block_num;// Block number
  22. long block_size;// Block size
  23. };
  24. struct KBlockHeader
  25. {
  26. void* next;// next block
  27. long size;// block size
  28. long magic;// header magic code
  29. };
  30. struct KBlockTailer
  31. {
  32. long magic;// tail magic code
  33. };
  34.     enum
  35. {
  36.         MIN_BLOCK = 4,  // min block size is 2^4
  37. MAX_BLOCK = 10, // max block size is 2^10
  38. NUM_BLOCK = ((MAX_BLOCK-MIN_BLOCK)+1),
  39. HEAD_MAGIC = 0xDEADBEEF, // header magic code
  40. TAIL_MAGIC = 0xFEEBDAED, // tailer magic code
  41. CHUNK_SIZE = 16 * 1024, // chunk size is 16kb
  42.     };
  43.     KList m_chunks;
  44.     void* m_blocks[NUM_BLOCK];
  45.     long m_block_size[NUM_BLOCK];
  46.     void* NewChunk(int block_size, int block_num);
  47.     void FreeChunk(KChunkHeader *ch);
  48. void InitBlock();
  49. void CheckLeak();
  50. public:
  51.     KMemManager();
  52.     ~KMemManager();
  53.     void* Malloc(int size);// 分配的内存(不用初始化)
  54.     void* Calloc(int size);// 分配的内存(用零初始化)
  55.     void Free(void* p);
  56. };
  57. extern ENGINE_API KMemManager g_MemManager;
  58. //---------------------------------------------------------------------------
  59. #endif