我有一个形式的结构:
typedef struct node {
unsigned int * keys;
unsigned int * branches;
} NODE;
键和分支的数量是在运行时确定的,但是是已知的。它派生自另一个结构:
typedef struct tree {
unsigned int num_keys_per_node;
} TREE;
为了为此分配 a NODE
,TREE
手动步骤将是:
NODE node;
unsigned int keys[tree->num_keys_per_node];
unsigned int branches[tree->num_keys_per_node + 1];
node.keys = keys;
node.branches = branches;
我需要在紧密循环中分配很多这些节点,只是在我遍历数据结构时临时分配,在节点遍历继续时快速丢弃它们。我可以编写一个函数来返回一个指针以及malloc()
堆上的键和分支以及free()
手动,但如果可能的话,我更喜欢使用堆栈。
由于此初始化逻辑将在许多地方重复,我如何定义宏,以便我可以有效地执行以下操作:
NODE node = CREATE_NODE_FOR_TREE(tree);
我很难找到一种方法来做到这一点,这将导致预处理器给出有效的语法。
很高兴听到其他在堆栈内存上进行动态结构分配的方法。
编辑 | 我不应该同时在内存中需要多个节点,所以我也可以重复使用一个结构。