微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何取消分配分配给对象的多余内存向量

如何解决如何取消分配分配给对象的多余内存向量

当定义一个没有事先为该向量预留/分配内存的向量,并通过push_back()填充该向量时,该向量的总内存分配占用空间(如我在Xcode Instruments所观察到的)最终会比向量本身的内容

这是一个问题,因为我正在创建大量这样的向量。有一次我知道向量将保持不变,我想知道是否存在一种方法可以“修剪”分配给向量的超出其实际大小的内存。

我知道已经做了过多的分配来创建缓冲区,并最大程度地减小了如果向量增长到已经占用的内存中就不得不重新定位向量的风险(对吗?)。但是,正如我所说,我知道有关的向量将保持不变。

问题我有一个向量V。从某种意义上说,我知道向量将保持不变。因此,我希望在V周围“修剪”“内存分配占用空间”,以消除多余的保留内存,从而最大程度地减少内存碎片。能做到吗?

我希望有这样的东西

V.finalise(); // * Does not exist *
V.prune();    // * Does not exist *

我尝试过“黑客”之类的

vector<T> VC // VC will be used to "copy-out" results from inner scope
{
    vector<T> V = f(); //f() builds V gradually via push_back(),no constructor used inside f()
    VC{V}              // Constructor-copy a "clean and tight" new vector copy of V
} // Destroy "messy" V leaving scope and keep a clean VC

vector<T> V = f();
vector<T> VC{V}
V.erase(); // Destroy "messy" V and keep a clean VC

似乎都不起作用:在所有后续代码中,与在函数f()中创建V相关的多余分配都将保留。

跟进问题:即使在我的测试运行中,多余的分配仍然存在,我想如果需要的话,可以为同一进程(即运行)回收该内存。程序)。正确吗?

感谢您对此新手到内存分配问题的解答。

编辑/更新

解决方(由于可疑问题导致问题被关闭,请在此处输入可见性)

 std::vector<T>::shrink_to_fit() // c+11

按照以下答案之一进行工作:https://stackoverflow.com/a/1111311/11608725到本问题的重复(reduce the capacity of an stl vector)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。