C Pattern/Idiom 用于平衡 alloc/free
C Pattern/Idiom for balancing alloc/free
我有一堆遵循简单模式的代码:
Thing *myThing = newThing(); // allocation happens here
...
thingFuncA(myThing);
... and other computations ...
thingFuncB(myThing);
...
thingFree(myThing);
return result;
thingFuncX()
的应用与其他计算一样各不相同,但它始终 免费 最后的模式始终相同。
我需要在这里使用原始 C(现在,不是 C++,它有花哨的范围分配),我是 运行 半限制处理器上的裸机。
有没有办法(滥用)使用 CPreprocessor 来捕获这种常见模式。我想有一个我使用的成语,这样我就可以相信免费不会被遗忘。我想我也许可以用一个宏和一个 while { } do ()
做一些事情(在这种情况下,一个例子的答案会有所帮助)。或者我可能忽略了其他一些聪明的 C 技巧?
GCC 提供了 cleanup
属性,它本质上允许您在 C:
中拥有基于作用域的析构函数
void function(void) {
Thing *myThing __attribute__((cleanup(callback))) = newThing();
...
thingFuncA(myThing);
thingFuncB(myThing);
}
void callback(Thing **thing) {
thingFree(*thing);
}
我有一堆遵循简单模式的代码:
Thing *myThing = newThing(); // allocation happens here
...
thingFuncA(myThing);
... and other computations ...
thingFuncB(myThing);
...
thingFree(myThing);
return result;
thingFuncX()
的应用与其他计算一样各不相同,但它始终 免费 最后的模式始终相同。
我需要在这里使用原始 C(现在,不是 C++,它有花哨的范围分配),我是 运行 半限制处理器上的裸机。
有没有办法(滥用)使用 CPreprocessor 来捕获这种常见模式。我想有一个我使用的成语,这样我就可以相信免费不会被遗忘。我想我也许可以用一个宏和一个 while { } do ()
做一些事情(在这种情况下,一个例子的答案会有所帮助)。或者我可能忽略了其他一些聪明的 C 技巧?
GCC 提供了 cleanup
属性,它本质上允许您在 C:
void function(void) {
Thing *myThing __attribute__((cleanup(callback))) = newThing();
...
thingFuncA(myThing);
thingFuncB(myThing);
}
void callback(Thing **thing) {
thingFree(*thing);
}