是否可以部分释放内存?

Cam*_*Cam 7 c c++ free

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

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

int * a = malloc(sizeof(int)*100);
Run Code Online (Sandbox Code Playgroud)

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

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

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

On *_*und 15

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

  • @Cam,不.允许(并且经常会)缩小现有区域. (4认同)
  • @ watson1180:没错,但仅此一点意味着什么.原则上realloc可以实现为O(n!^ 99)时间并且总是分配必要内存的500倍,但我们当然不会在做出涉及realloc的决策时考虑到这一点. (4认同)
  • @watson,`realloc`的真正实现不会将内存返回给系统?请注意,要么缩小到位,要么移动,复制,自由旧将返回内存. (3认同)