나는 자유로운 기억이 어떤 이유로 OS에 반환되지 않는다는 것을 알고 있습니다.
free
을 호출 한 후 메모리에 어떤 일이 발생하는지는 구현에 따라 다릅니다. 운영 체제에 완료되었다고 알립니다. 그것은 공개할지 여부를 결정할 수 있습니다. 이를 공개하지 않은 한 가지 이유는 메모리를 할당하는 데 많은 비용이들 수 있으며, 프로그램이 더 많은 메모리를 요구하면 OS는 동일한 메모리를 다시 돌려 줄 수 있습니다.
제 질문은 할당 된 메모리를 다시 사용하는 대신 프로그램을 다시 실행할 때 제 응용 프로그램의 메모리 사용량을 계속 증가시키는 것입니다.
아니요. 프로그램이 종료되면 할당 된 모든 메모리가 해제됩니다. 적어도 그렇게해야합니다. 그럼에도 불구하고 은 "귀하의 비즈니스가 아닙니다"라고 말할 수 있습니다..
간단한 C 프로그램을 만들었습니다. 오류 검사는 없지만 프로그램을 실행하는 동안 프로그램의 동작을 관찰하는 데 사용할 수 있습니다. 무작위 값으로 배열을 채우는 코드와이를 인쇄하기위한 코드는 아무 것도 최적화되지 않도록하기위한 것입니다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int *ptr;
int size;
char c='a';
srand(time(NULL));
while(c!='q')
{
printf("a - allocate memory\n");
printf("f - free memory\n");
printf("p - print array\n");
printf("q - quit\n");
printf("Choose: ");
scanf(" %c", &c);
if(c=='q')
break;
else if(c=='a') {
printf("Size : ");
scanf(" %d", &size);
ptr=malloc(size * sizeof(*ptr));
for(int i=0; i<size; i++)
ptr[i]=rand();
}
else if (c=='f')
free(ptr);
else if(c=='p') {
for(int i=0; i<size; i++)
printf("%d", ptr[i]);
}
}
}
내가 top -p<PID>
와 과정을보고 있었다 그리고이 모습을 사용하는 동안 :
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28601 klutt 20 0 4172 692 616 S 0.0 0.0 0:00.00 a.out
내가 할당 해제 된 메모리는 가끔 보여 때로는하지 않는 경우. 큰 크기를 지정하면 더 자주 차이가납니다. 그리고 예, 저는 Windows를 지정했고 Linux 명령을 사용했음을 알고 있습니다. 그러나 Windows에서 프로세스를 분석 할 수있는 동등한 도구를 찾을 수 있다고 확신합니다.
* "나는 이유가있어 자유 메모리가 OS로 반환되지 않는다는 것을 알고 있습니다."* - 왜 그렇게 생각하니? – klutt
'free()'는 메모리를 즉시 os로 반환하지는 않지만, _termination_ 프로세스 이후에, 그 프로세스에 의해 사용 된 모든 메모리는 즉시 다시 이용 가능해야한다. – Ctx
그 질문입니까 ("장기간 사용하면 메모리 사용량이 증가합니까?") 또는 관찰 한 내용입니까? – datenwolf