gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:25:31 25 4
gpt4 key购买 nike

我有以下头文件:

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

最佳答案

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

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

这就是各种 pthreads 数据类型(例如 pthread_mutex_t)的定义方式。

关于在不知道结构实现的情况下在 C 中创建结构的静态实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8138797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com