是否可以部分释放内存?

时间:2010-12-15 07:04:06

标签: c++ c free

在C(或C ++)中,我想知道是否可以部分释放一块内存。

例如,假设我们创建一个大小为100的整数数组a

int * a = malloc(sizeof(int)*100);

然后我们想要调整a的大小,使其保持20个整数而不是100个。

有没有办法只释放a的最后80 * sizeof(int)字节?例如,如果我们调用realloc,它会自动执行此操作吗?

  • 我正在寻找一种不需要移动/复制前20个整数的解决方案。
  • 或者,你能解释为什么如果可能的话会有什么不好,或者为什么这两种语言都没有包含这种能力呢?

3 个答案:

答案 0 :(得分:15)

您可以使用realloc,但绝对应该考虑使用STL容器而不是手动分配内存。

答案 1 :(得分:3)

我们更喜欢RAII容器到C ++中的原始指针。

#include <vector>

// ...

{
    std::vector<int> a(100)
    // ...
    std::vector<int>(a.begin(), a.begin() + 20).swap(a);
}

答案 2 :(得分:2)

我更喜欢使用std::vector。让我们启用C ++ 0x:

std::vector<int> vec(20);
vec.reserve(100);

// do something

vec.shrink_to_fit();

从n3092开始(不是最终草稿,我需要在这台PC上获得一份新的副本):

void shrink_to_fit();

备注:shrink_to_fit是一个减少内存使用的非绑定请求。 [注意:请求是非绑定的,以允许特定于实现的优化的纬度。 - 尾注]