Я работаю над проектом, который реализует алгоритм распределения друзей на C. Используя mmap(), я выделил 1 ГБ непрерывной памяти. Это выглядит так:
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. Что я делаю неправильно?
ptr
вstruct Node
как((struct Node*)ptr)->header or change the
ptr` в типstruct Node *
и выполнить ptr-›header. 06.11.2014