놀랍게도 메타 데이터를 저장하는 두 프로그램의 malloc 저장소의 메타 데이터가 내가 찾아 무엇을하려고 하였다 않습니다 정확히 어떻게 데이터 유형이 다르다하더라도 같은 두 포인터의 차이 .....malloc에
했다 이 작은 실험으로 알아 ...
프로그램 1 :
int main()
{
char *i,*j;
i=(char*)malloc (sizeof(char));
j=(char*)malloc (sizeof(char));
printf ("%x\n",i);
printf ("%x\n",j);
return 0;
}
출력 :
710010
710030
,
프로그램 2 :
int main()
{
int *i,*j;
i=(int*)malloc (sizeof(int));
j=(int*)malloc (sizeof(int));
printf ("%x\n",i);
printf ("%x\n",j);
return 0;
}
출력 : 내가이 프로그램을하기 전에 생각했던 어떤
16b8010
16b8030
:
| meta data of i | memory space of i | meta data of j | memory space of j |
을하지만 결과는 이론을 지원하지 않습니다 ....
참고 : [malloc의 결과를 캐스팅하지 마십시오.] (http://stackoverflow.com/q/605845/119527). –
^부적합한 의견 – PRP
malloc() 함수는 이중 연결리스트와 함께 다른 오버 헤드를 더한 것으로 작동합니다. 따라서 연속적인 malloc 호출은 서로간에 예상되는 오프셋으로 주소를 반환하지 않습니다. 또한 함수 호출에서 char이 int로 승격됩니다. 또한 malloc()의 대부분의 구현은 필요한 수학 계산량을 줄이기 위해 최소 크기의 배수로 메모리를 사용합니다. 또한 많은 malloc() 구현체는 미리 할당 된 메모리 풀과 함께 작동합니다. 결과는 거의 모든 malloc() 호출이 실제로 예상보다 많은 메모리를 실제로 확보합니다. – user3629249