Hello Mat

 找回密码
 立即注册
查看: 886|回复: 0

C++内存管理

[复制链接]

1298

主题

1524

帖子

114

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22653
发表于 2024-1-5 21:14:04 | 显示全部楼层 |阅读模式
  1. 在C++中,std::vector 是一种动态数组,其内存管理是通过标准库自动完成的。std::vector 会根据需要自动增长,并在不再需要时自动收缩。

  2. 当 std::vector 的容量(capacity)超过其当前大小(size)时,它会自动分配更大的内存块并将所有元素复制到新内存块中。当 std::vector 的大小减小,并且其容量仍然大于当前大小时,std::vector 会保持该容量并重新分配内存,而不是释放未使用的内存。

  3. 如果你想释放 std::vector 占用的内存,可以将其大小设置为0,这将导致 std::vector 释放其内部数组的内存。例如:

  4. cpp
  5. 复制
  6. std::vector<int> vec;
  7. // ... 使用 vec ...
  8. vec.clear();  // 将 vec 的大小设置为0,释放内存

  9. 如果你想完全重置 std::vector(包括释放内存并重置其状态),可以使用 std::vector::clear() 或 std::vector::swap() 方法:

  10. cpp
  11. 复制
  12. vec.clear();  // 释放内存并设置大小为0

  13. 或者:

  14. cpp
  15. 复制
  16. std::vector<int>().swap(vec);  // 用一个临时空 vector 交换 vec,这将释放 vec 的内存并重置其状态

  17. 请注意,当你删除 std::vector 的元素或将其容量设置为小于其当前大小时,它不会释放内存。这是为了提高性能,因为重新分配和复制元素的开销相对较大。如果你需要频繁地重新分配 std::vector 的大小,考虑使用其他数据结构或手动管理内存。
复制代码


算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-5-20 09:56 , Processed in 0.216178 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表