C에서 버디 할당 알고리즘을 구현하는 프로젝트에서 작업 중입니다. mmap()을 사용하여 1GB의 연속 메모리 공간을 할당했습니다. 다음과 같이 보입니다 :어떻게 동적으로 할당 된 공간에이 구조체를 넣을 수 있습니까?
char * base = mmap(NULL, MAX_MEM, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 0, 0);
나는 그 공간에 넣으려고하는 구조체를 가지고 있습니다. 구조체는 다음과 같습니다.
typedef struct Node {
unsigned char header;
struct Node *next;
struct Node *prev;
}node;
노드를 그 지점으로 가져 오는 방법을 잘 모르겠습니다. 나는 맨 처음에 노드를하지 않았기 때문에 아래의 코드를했지만, 내가 포인터를 인쇄 할 때 그들은 많은 다른 점을 보여이 밖으로
void *ptr = (struct Node *) base + 512;
printf("base: %p\n", base);
printf("ptr: %p\n", ptr);
내 터미널 창 인쇄 :
base: 0x102ef1000
ptr: 0x102ef4000
하지만 포인터가 12288 개의 공백으로 512 개가 아닌 서로 다른 메모리에 있기 때문에 이것은 올바르게 보이지 않습니다. 무엇이 잘못 되었나요?
다음 줄 : void * ptr = ((struct Node *) base) + 512; 다음과 같아야합니다. node * ptr = (node *) ((char *) (base + 512)); humm,이 편집기는 (노드 *)에 '*'를 계속 표시합니다. – user3629249