在 C 语言中编写一个简单的池分配器

主要观点:Valgrind 是用于调试和分析程序的有用工具,可检测内存泄漏和无效内存访问,其框架支持自定义分配器。
关键信息:

  • 可通过包含valgrind/valgrind.hvalgrind/memcheck.h头文件使用 Valgrind。
  • 需用VALGRIND_CREATE_MEMPOOL注册锚地址,用VALGRIND_DESTROY_MEMPOOL销毁池。
  • VALGRIND_MAKE_MEM_NOACCESS用于使内存区域不可访问,VALGRIND_MAKE_MEM_DEFINED用于读写不可访问区域。
  • 分配和释放内存块时分别使用VALGRIND_MEMPOOL_ALLOCVALGRIND_MEMPOOL_FREE
    重要细节:
  • pool_new中对相关内存区域设置为不可访问后创建内存池。
  • pool_expand中对扩展部分和相关结构设置为不可访问。
  • pool_close中遍历并设置相关结构为可访问后销毁内存池。
  • pool_allocpool_free中对相关对象设置为可访问后进行内存操作。最后强调虽使代码可读性降低,但添加 Valgrind 支持是值得的,并欢迎贡献和改进。
阅读 7
0 条评论