当前位置: 首页 > 知识库问答 >
问题:

realloc是否释放现有内存?

隗俊誉
2023-03-14
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
       int *i,*jn, *m;
       i = (int*)malloc(5 * sizeof(int));
       int j,k=10;

      for(j=0 ;j<5; j++)
      {
         i[j] = j;
         printf("%d \n",i[j]);
      }

      for(j=0 ;j<5; j++)
      {
        printf("%p\n",i++);
      }

      jn = (int *)calloc(5, sizeof(*i));

      for(j=0 ;j<5; j++)
      {
         printf("%p\n",jn++);
      }

       i = i-5;
       m = i;

      printf("m = %p  %d\n",(m+1), *(m+1));

      i =(int *)realloc(i,8*sizeof(int));

      for(j=0 ;j<8; j++)
      {

         printf("%d\n",i[j]);
      }

      for(j=0 ;j<8; j++)
      {

        printf("%p\n",i++);
      }
      printf("m = %p  %d\n",(m+1), *(m+1));

      return 0;
}

共有1个答案

郜谦
2023-03-14

首先,realloc可能决定

>

  • 分配新的内存块、复制数据并释放原始内存块,或

    只需“原地”展开/收缩原始块,而无需分配新块。

  •  类似资料:
    • 当垃圾收集器运行并释放内存时,内存会返回操作系统还是作为进程的一部分保留下来。我的强烈印象是,内存实际上从未释放回操作系统,而是作为内存区域/池的一部分保留下来,供同一进程重复使用。 因此,进程的实际内存永远不会减少。提醒我的一篇文章是这样的,Java的运行时是用C/C写的,所以我想同样的事情也适用? 更新< br >我的问题是关于Java的。我提到C/C是因为我假设Java的分配/释放是由JRE

    • 问题内容: 当垃圾收集器运行并释放内存时,该内存将返回操作系统,还是作为进程的一部分保留。我印象深刻的是,该内存实际上从未释放回OS,而是保留为内存区域/池的一部分,以供同一进程重用。 结果,进程的实际内存将永远不会减少。一篇使我想起的文章是Java的Runtime是用C / C ++编写的,所以我想同样的事情适用吗? 更新 我的问题是关于Java的。我之所以提到C / C ++,是因为我假设Ja

    • 问题内容: 在Java运行时中,如果我的应用程序释放了内存,运行时是否将内存释放回OS?还是回到我的过程? 问题答案: 这取决于JVM的实现,在规范中未指定。 作为第一步,Sun JVM将保留它。一旦未使用一定比例(可配置)的已分配内存,它将将其中一部分返回给OS(行为受和设置影响)。

    • wcsdup等函数隐式调用malloc为目标缓冲区分配内存。我想知道,由于内存分配不是很明确,所以显式释放存储似乎合乎逻辑吗?这更像是一种设计困境,赞成和反对的理由如下 应释放,因为 不释放它会导致内存泄漏。 wcsdup/_wcsdup调用malloc来分配内存,即使是从C程序调用的。 不应该被释放,因为 wcsdup积累的内存最终会在程序退出时被释放。在整个程序生命周期中,我们总是会遇到一些内

    • 我基本上有一个但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地只设置适当的位置,但这将更加困难,因为我的特定程序依赖于矩阵的索引。如何有选择地释放矩阵的某些索引。 例如,对于特定节点,我不需要uint64_t[4][3]或uint64_t[7][3],如何释放该节点?

    • 问题内容: 我对等待和通知/ notifyAll感到有些困惑。 我知道每个Java对象都有一个锁。我知道等待将释放其他线程的锁。notify / notifyall怎么样?notify / notifyAll是否释放它为其他线程持有的锁? 问题答案: 否- / 不要像那样释放锁。唤醒的线程直到调用的代码释放其锁后才能运行。 这就是Javadoc所说的: 该线程释放此监视器的所有权,并等待直到另一个