Dynamic Memory

sizeof

  • sizeof 无法获取动态分配内存的大小, 因为sizeof是在编译期就确定的,而动态内存的大小是在运行期决定的
    std::vector<int> x;
    x.push_back(10);
    x.push_back(10);
    std::cout << sizeof(x) << std::endl;  // 无法获取x的大小
    

allocator

  • 使用allocator来分配内存和释放内存
    std::allocator<int> al;
    int* ptr = al.allocate(3);
    al.deallocate(ptr, 3);
    
  • 缺陷:只能分配固定类型的内存,比如上面的例子只能分配int类型
  • 推荐使用allocator,因为allocator是C++标准,malloc,aligned_alloc是C标准

malloc & free

  • 使用malloc和free来管理内存
    int* p1 = malloc(4 * sizeof(int));
    int* p2 = malloc(sizeof(int[4]));  // same space
    free(p1);
    free(p2);
    
  • 优点:只关注分配类型的大小,不受限于类型
  • 缺陷:不能分配对齐内存

aligned_alloc

  • 可以分配对齐内存

动态内存与异常安全

  int* ptr = new int(3);
  /*
    异常触发,跳转到异常处理语句,没有执行下面的delete,造成内存泄漏
    建议使用智能指针,避免该问题
  */
  delete ptr;

Search

    欢迎添加我的微信

    闷骚的程序员

    Table of Contents