我有以下的头文件:
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的实际数据结构隐藏起来,不让实现它的代码知道。如果有其他实现目标的建议也欢迎提供。谢谢。
char
只需要字节对齐,但更复杂的结构通常具有更强的对齐要求。 - Raymond Chenchar
数组和另一个类型的联合体,该类型提供所需的对齐方式(例如long int
)。 - Adam Rosenfield