我有以下头文件:
typedef struct my_data my_data_t;
my_data_t* new_my_data(void);
void free_my_data(my_data_t* my_data);
和相应的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的情况下在静态内存中创建my_data_t的实例。我想通过在头文件中添加以下内容来完成此操作:
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的实际数据结构隐藏在实现它的代码中。欢迎任何其他有关如何实现目标的建议。感谢。
答案 0 :(得分:3)
通常的做法是在头文件中使用正确的大小创建一个不透明的结构。例如:
#define MY_DATA_SIZE 32
struct my_data_t
{
char opaque_data[MY_DATA_SIZE];
};
这是定义各种pthreads数据类型(例如pthread_mutex_t
)的方式。
答案 1 :(得分:2)
如何添加到头文件
my_data_t *get_static_data();
和你的c档
my_data_t *get_static_data()
{
static my_data_t static_my_data;
return &static_my_data;
}