我正在为学校项目开发自制的malloc(),realloc()和free()。
我想知道我的函数free()是否有办法知道这是否是他在程序中的最后一次调用。
编辑:我没有控制main(),它是用于库的。
我想使用sbrk()最后一次释放一次,因为到目前为止,我毕竟将其称为free(),并且尚未进行优化。
(我删除了这段代码,因为我不想被学校罢课)
似乎不可能。。谢谢您的答复。
答案 0 :(得分:0)
不,通常没有办法知道程序执行中是否最后一次调用了函数。
可以设计一个程序,通过传递表示该知识的参数来传达该知识。您必须将其构建到调用链中的所有函数中。即便如此,由于某些循环的最后一次迭代可能需要特殊处理,因此它可能仍会使某些代码变得笨拙。
通常,最好在适当的时间调用单独的清理代码,而不是尝试按照您似乎尝试的方式将其自动合并到常规操作中。
答案 1 :(得分:0)
不,你不能。
示例:
一个小玩笑: 对于您来说,实现您想要的唯一可能性是让函数free()中止整个程序,以确保不会再次调用该程序。
答案 2 :(得分:0)
不,这是不可能的,正如其他答案所述。
您能做的最接近的事情是注册一个atexit
处理程序以执行您想执行的任何清理工作:
static int init = 0;
void cleanup()
{
// last call to sbrk to clean up
}
void *my_malloc(size_t size)
{
if (!init) {
init = 1;
atexit(cleanup);
}
...
}