C中的内存管理

use*_*755 1 c

假设我有一个结构和一个指向内存位置p的指针,我如何确保在创建结构的实例'a'时,它被放入一个从p开始的内存块?

所以我传递了一大块内存,我想在它的开头创建一个节点,所以我需要确保在它的开头创建节点.(注意:我不能使用malloc,calloc,free,memcpy或类似函数,因为我正在为内存管理系统编写代码).

pax*_*blo 7

你并没有真正在C中"创建"结构实例.假设p指向可用内存块,您可以将其p视为指向结构类型的指针:

typedef struct {int x; long y;} a;

a *p2 = (a*)p;
int z = p2->x;

// or, if you don't want p2:
z = ((a*)p)->x;
Run Code Online (Sandbox Code Playgroud)

一旦p投射(如上所述隐式或显式),您可以根据需要初始化结构的内容.

作为示例,以下代码将初始化您似乎请求的结构:

typedef struct {int x; float y;} tA;
void initA (void *p) {
    tA *p2 = (tA*)p;
    p2->x = 0;
    p2->y = 3.14159;
}
int main (void) {
    char bigmem[100];
    initA (&(bigmem[0]));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不要挂断main上面的函数,它只是为了说明如何将任意内存地址传递给函数.在你的真实案例中,你将以某种方式分配内存.