我有以下内容:

typedef struct _wrapper {
    int num;
    foo *bar;
    pthread_mutext_t lock;
    struct _wrapper *prev;
    struct _wrapper *next;
} wrapper;


您可能已经知道我要去哪里了:我想在运行时预先加载多个包装器,以免每次需要包装器时都必须使用malloc调用。我将使用try_lock循环查找可用的包装器,并在循环遍历所有内容而不找到可用的包装器之后,再次使用malloc()分配另外几个包装,并将其添加到包装器的链接列表中。

我可以通过执行单个malloc()调用的for循环并像这样构建链表来正确构建它,并只需为循环中的每个循环修改* next和* prev即可。我想发现的是,是否有一种方法可以在单个malloc()语句中(即(wrapper *)malloc(sizeof(wrapper)* 50);实质上创建它们)。如何构建所有这些包装并将它们放置在内存中的正确位置以确保我不会踩到其他包装?朝着正确的方向前进将不胜感激。

最佳答案

您可以使用malloc(50*sizeof wrapper)分配50个包装的数组
如果将malloc的结果存储到包装器* p中,则可以通过p[0],... p[49]进行访问,当需要指针时(例如,当处理您的链表)
如果您无法一次为整个集合完成分配和释放操作,则可能使附加分配和释放操作变得复杂,但是这种内存池是加快分配速度的一种常用方法。
别忘了您必须初始化互斥量,分配它是不够的。

关于c - 多个结构的预分配-同一结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34177730/

10-12 02:15