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

时间:2011-11-15 15:31:03

标签: 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);

和相应的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的实际数据结构隐藏在实现它的代码中。欢迎任何其他有关如何实现目标的建议。感谢。

2 个答案:

答案 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;
}