用于平衡alloc / free的C Pattern / Idiom

时间:2015-02-03 20:29:15

标签: c memory-management allocation bare-metal

我有一堆遵循简单模式的代码:

Thing *myThing = newThing(); // allocation happens here
...
thingFuncA(myThing);
... and other computations ...
thingFuncB(myThing);
...
thingFree(myThing);
return result;

thingFuncX()的应用程序与其他计算方式不同,但最终总是 free '的模式总是相同的。

我需要在这里使用原始C(iow,而不是使用它的花式范围分配的C ++),我在半限制处理器上运行裸机。

有没有办法(ab)使用CPreprocessor捕获这种常见模式。我想要使​​用一个成语,这样我就可以放心,不会忘记自由。我想我可能会用宏和while { } do ()做一些事情(在这种情况下,一个例子的答案会有所帮助)。或者也许还有一些其他聪明的C技巧我忽略了?

1 个答案:

答案 0 :(得分:5)

GCC提供cleanup属性,它基本上允许您在C中使用基于范围的析构函数:

void function(void) {
    Thing *myThing __attribute__((cleanup(callback))) = newThing();
    ...
    thingFuncA(myThing);
    thingFuncB(myThing);
}

void callback(Thing **thing) {
    thingFree(*thing);
}