在不知道结构实现的情况下在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
)的并集。