malloc()은 over allowed이고 free()는 전체 메모리를 해제하지 않는다는 것을 알고 있습니다. 나는이 모든 것을 확인하는 코드를 테스트 :동적 할당 - 메모리 관리
extern char _end;
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char * res;
int tas,rupt,esp;
printf("\n Before any memory reservation\n --------------------------\n");
tas=sbrk(0);
printf("End position of the pile : %p\n",tas);
rupt=&_end;
printf("Breaking point : %p\n",rupt);
esp=tas-rupt;
printf("Space between the end of the heap and breaking point : %d bytes \n",esp);
printf("Pages allocated for malloc %f\n",(tas-rupt-esp)/4096.0);
printf("whether %d bytes\n",tas-rupt-esp);
int nbEntier = 0, i = 0;
int* tabEntier ; // This pointer is used as a table after the call of malloc
// Asked the number of integers to the user
printf("How integer do you want to store? ");
scanf("%d", &nbEntier);
if (nbEntier > 0)
{
tabEntier = malloc(nbEntier * sizeof(int));
if (tabEntier== 0)
{
exit(0); //
}
//We ask the integer
for (i = 0 ; i < nbEntier ; i++)
{
printf("Integer n° %d ? ", i + 1);
scanf("%d", &tabEntier[i]);
}
// We display the integer one to one
printf("\n\nYour integers are :\n");
for (i = 0 ; i < nbEntier ; i++)
{
printf("%d \n", tabEntier[i]);
}
tas=sbrk(0);
printf("End position of the pile : %p\n",tas);
rupt=&_end;
printf("Breaking point : %p\n",rupt);
printf("Space between the end of the heap and breaking point : %d bytes \n",tas-rupt);
printf("Pages allocated for malloc %f\n",(tas-rupt-esp)/4096.0);
printf("whether %d bytes\n",tas-rupt-esp);
free(tabEntier);
printf("\nDisplay after free():\n");
printf("\n\nYour integers are :\n");
for (i = 0 ; i < nbEntier ; i++)
{
printf("%d \n", tabEntier[i]);
}
}
return 0;
}
내 결과 :
Before any memory reservation -------------------------- End position of the pile : 0x9886000 Breaking point : 0x8049c2c Space between the end of the heap and breaking point : 25412564 bytes Pages allocated for malloc 0.000000 whether 0 bytes How integer do you want to store? 3 Integer n° 1 ? 45 Integer n° 2 ? 85 Integer n° 3 ? 78 Your integers are : 45 85 78 End position of the pile : 0x98a7000 Breaking point : 0x8049c2c Space between the end of the heap and breaking point : 25547732 bytes Pages allocated for malloc 33.000000 whether 135168 bytes Display after free(): Your integers are : 0 85 78
이해가 안! 정수를 물어 보았을 때도 항상 33 페이지를 할당하고 free() 이후에 나머지가 아닌 전체를 해제하는 이유는 무엇입니까?
33 개가 어디서 나왔습니까? 나는 당신의 결과에서 그것을 볼 수 없다 ... – RedX
죄송합니다. 내가 틀린 코드였습니다. 난 그냥 게시물을 업데이 트 RedX –