c++实现一个简单的空间配置器allocator

c++实现一个简单的空间配置器allocator


      c++中内存分配和对象构造是分开来的,内存的分配类似malloc函数在内存空间开辟一段空间,但是里面不保存任何数据。对象的构造相当于给这段空间复制。


      这么做的理由有两点:

  •       在预先分配的内存中构造对象很浪费,可能创建从不使用的对象,当实际使用预先分配的对象时,被使用的对象往往又必须重新赋以新值。
  •       如果预分配的内存必须被构造,某些类就不能使用它。(?不理解)


      C++中内存分配一般有三个层次:

  1. 使用new创建对象, delete删除对象
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个类似 C Allocator 的 C 模板代码: ``` #include <stdio.h> #include <stdlib.h> #define ALLOC_SIZE 1024 // 分配的内存块大小 struct mem_control_block { int is_available; int size; }; char memory_pool[ALLOC_SIZE]; // 内存池 void *my_malloc(int size) { struct mem_control_block *current_block, *best_fit_block; char *memory_pool_ptr = memory_pool; int remaining_size; best_fit_block = NULL; while (memory_pool_ptr < memory_pool + ALLOC_SIZE) { current_block = (struct mem_control_block *) memory_pool_ptr; remaining_size = ALLOC_SIZE - (memory_pool_ptr - memory_pool); if (current_block->is_available) { if (current_block->size >= size && (best_fit_block == NULL || current_block->size < best_fit_block->size)) { best_fit_block = current_block; } } memory_pool_ptr += current_block->size; } if (best_fit_block != NULL) { best_fit_block->is_available = 0; return best_fit_block + 1; } return NULL; } void my_free(void *ptr) { struct mem_control_block *current_block; current_block = (struct mem_control_block *) ptr - 1; current_block->is_available = 1; } int main() { char *str; str = (char *) my_malloc(100); strcpy(str, "Hello, World!"); printf("%s\n", str); my_free(str); return 0; } ``` 这个代码实现了一个类似于C语言中的内存分配,它使用一个固定大小的内存池来分配和释放内存。 `my_malloc`函数用于分配内存,它接收一个参数,表示需要分配的内存大小,返回指向分配的内存块的指针。如果分配失败返回NULL `my_free`函数用于释放内存,接受一个参数,

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值