我正在开发一个用 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;
表示 ((struct Node *) base) + 512。
你想要的是
void *ptr = (struct Node *) (base + 512);
因此,您从分配开始处跳过 512 个字节。
根据the post ,强制转换的优先级高于加法。
关于c - 如何将此结构放入动态分配的空间中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26770752/