gpt4 book ai didi

c - 为什么 free() 并没有真正释放内存?

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:24 28 4
gpt4 key购买 nike

我正在做一些分配和释放内存的测试。这是我正在使用的代码:

#include <stdlib.h>
#include <stdio.h>

#define WAVE_SIZE 100000000

int main(int argc,char* argv[]){

int i;
int **p;

printf("%d allocs...\n",WAVE_SIZE);

// Malloc
printf("Allocating memory...\n");
p = (int**)malloc(WAVE_SIZE*sizeof(int*));
for(i = 0;i < WAVE_SIZE;i++)
p[i] = (int*)malloc(sizeof(int));

// Break
printf("Press a key to continue...\n");
scanf("%*s");

// Dealloc
printf("Deallocating memory...\n");
for(i = 0;i < WAVE_SIZE;i++)
free(p[i]);
free(p);

// Break
printf("Press a key to continue...\n");
scanf("%*s");

return 0;
}

在休息期间,我检查了进程使用的总内存,但没有看到我期望的结果。

在第一次暂停之前,我看到内存消耗在增加。但是,在第二次暂停时我没有看到它被释放。

这是操作系统的问题吗?如果我的机器负载很高,我没有可用内存并且另一个进程尝试分配内存,会发生什么情况?

最佳答案

free 不一定将内存释放回操作系统。大多数情况下,它只是将该内存区域放回空闲 block 列表中。这些空闲 block 可以重新用于下一次调用 malloc

关于c - 为什么 free() 并没有真正释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450968/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com