在不知道结构实现的情况下在C中创建结构的静态实例

在不知道结构实现的情况下在C中创建结构的静态实例,c,static,malloc,C,Static,Malloc,我有以下头文件: typedef struct my_data my_data_t; my_data_t* new_my_data(void); void free_my_data(my_data_t* my_data); int sizeof_my_data(void); 以及相应的c文件: typedef struct my_data { int val; } my_data_t; my_data_t* new_my_data() { my_data_t* ptr = (my_

我有以下头文件:

typedef struct my_data my_data_t;
my_data_t* new_my_data(void);
void free_my_data(my_data_t* my_data);
int sizeof_my_data(void);
以及相应的c文件:

typedef struct my_data
{
  int val;
} my_data_t;

my_data_t* new_my_data()
{
  my_data_t* ptr = (my_data_t*)malloc(sizeof(my_data_t));
  return ptr;
}

void free_my_data(my_data_t* my_data)
{
  free(my_data);
}
我想在不使用malloc的情况下在静态内存中创建我的_data_t的实例。我希望通过将以下内容添加到头文件中来完成此操作:

typedef struct my_data my_data_t;
my_data_t* new_my_data(void);
void free_my_data(my_data_t* my_data);
int sizeof_my_data(void);
…并将其添加到c文件:

int sizeof_my_data()
{
  return sizeof(my_data_t);
}
…然后像这样做:

static my_data_t* my_data_instance = static_alloc(sizeof_my_data());

这可能吗我想这样做,因为这段代码的目标机器是一个不处理malloc的微处理器(在我们的例子中,最好所有结构都保存在静态内存中),我希望在实现它的代码中隐藏我的_数据的实际数据结构。欢迎就如何实现该目标提出任何其他建议。谢谢。

添加到头文件怎么样

my_data_t *get_static_data();
和你的c文件

my_data_t *get_static_data()
{
    static my_data_t static_my_data;
    return &static_my_data;
}

通常的方法是在头文件中创建一个大小正确的不透明结构。例如:

#define MY_DATA_SIZE 32
struct my_data_t
{
    char opaque_data[MY_DATA_SIZE];
};

这就是各种pthreads数据类型(例如
pthread\u mutex\u t
)的定义方式。

请注意,这种技术可能会遇到对齐问题,因为
char
只需要字节对齐,但更复杂的结构通常具有更强的对齐要求。这一点很好,Raymond。现在我仔细看一下,pthreads类型被定义为适当大小的
char
数组和提供所需对齐的另一种类型(例如
long int
)的并集。