c - 如何将此结构放入动态分配的空间中?

标签 c pointers struct dynamic-memory-allocation

我正在开发一个用 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/

相关文章:

c++ - 如何重新分配三重指针

c - c中结构体返回值出现逻辑错误

c++ - 将 public 关键字与结构一起使用

c - append 两个没有 str 函数的字符串

c - Q : How to compare char from text file in C?

c - 为什么使用fftw3更好

c - 使用归并排序按字母顺序对结构数组进行排序

c - 为什么会出现这个 "dereferencing pointer to incomplete type"错误?

c - 为什么这些指针引用会导致不同的结果?

c atoi() 函数不起作用