• C++简单实现内存池原理


    前言

    该代码仅用于学习和理解其原理,当然高效内存池肯定是需要算法的。

    1. // demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    2. //
    3. #pragma pack(1)
    4. #include
    5. using namespace std;
    6. //简单内存池
    7. class gril
    8. {
    9. public:
    10. int name;
    11. // 定义静态成员存储内存池首地址。
    12. static char* pool;
    13. // 类构造函数
    14. gril(int name):name(name)
    15. {
    16. }
    17. // 静态方法,用于创建内存池。
    18. static bool iniPool()
    19. {
    20. pool = (char *)malloc(30); //创建30字节大小内存。
    21. if (pool == 0) return false;
    22. memset(pool, NULL, 30); //清空初始化内存池数据。
    23. return true;
    24. }
    25. // 静态方法,用于释放内存池。
    26. static void freePool()
    27. {
    28. if (pool == NULL) return; //NULL则跳过。
    29. free(pool);//释放内存池。
    30. }
    31. // 重载new成员函数,操作分配内存池。
    32. void* operator new(size_t size)
    33. {
    34. if (pool[0] == NULL)
    35. {
    36. cout << "分配第一块内存:" << (void*)&pool[0] << endl;
    37. return &pool[0];
    38. };
    39. if (pool[15] == NULL)
    40. {
    41. cout << "分配第二块内存:" << (void*)&pool[9] << endl;
    42. return &pool[15];
    43. };
    44. cout << "内存池不够了!" << endl;
    45. return malloc(size);
    46. }
    47. // 重载delete成员函数,操作清除内存块标识。
    48. void operator delete(void* p)
    49. {
    50. if ((pool + 0) == p)
    51. {
    52. cout << "清除第一块内存:" << (void*)(pool + 0) << endl;
    53. *(pool + 0) = NULL;
    54. }
    55. if ((pool + 15) == p)
    56. {
    57. cout << "清除第二块内存:" << (void*)&pool[15] << endl;
    58. *(pool + 15) = NULL;
    59. }
    60. }
    61. };
    62. // 初始化静态成员变量,内存池地址。
    63. char* gril::pool = NULL;
    64. int main()
    65. {
    66. if (gril::iniPool() == false)
    67. {
    68. cout << "创建你内存池失败!" << endl;
    69. return 0;
    70. }
    71. gril *a = new gril(1);
    72. gril* b = new gril(1);
    73. delete a;
    74. delete b;
    75. gril* c = new gril(1);
    76. gril* d = new gril(1);
    77. delete c;
    78. delete d;
    79. gril::freePool();
    80. gril* e = new gril(1);
    81. }

    执行结果

  • 相关阅读:
    IDEA中,maven项目下,lombok插件 ,添加lombok.jar, Maven项目下lombok依赖配置
    makefile之define和eval的简单介绍
    主动调度是如何发生的
    商城秒杀系统总结(Java)
    【LeetCode刷题笔记】二叉树(三)
    redis集群
    @Validated指定校验顺序
    网络安全(黑客)自学
    车载的智能家居模块
    XTuner InternLM-Chat 个人小助手认知微调实践
  • 原文地址:https://blog.csdn.net/weixin_47723549/article/details/134043205