如何知道一个函数是否最后一次调用

时间:2018-11-15 12:25:13

标签: c

我正在为学校项目开发自制的malloc(),realloc()和free()。​​

我想知道我的函数free()是否有办法知道这是否是他在程序中的最后一次调用。

编辑:我没有控制main(),它是用于库的。

我想使用sbrk()最后一次释放一次,因为到目前为止,我毕竟将其称为free(),并且尚未进行优化。

(我删除了这段代码,因为我不想被学校罢课)

似乎不可能。。谢谢您的答复。

3 个答案:

答案 0 :(得分:0)

不,通常没有办法知道程序执行中是否最后一次调用了函数。

可以设计一个程序,通过传递表示该知识的参数来传达该知识。您必须将其构建到调用链中的所有函数中。即便如此,由于某些循环的最后一次迭代可能需要特殊处理,因此它可能仍会使某些代码变得笨拙。

通常,最好在适当的时间调用单独的清理代码,而不是尝试按照您似乎尝试的方式将其自动合并到常规操作中。

答案 1 :(得分:0)

不,你不能。

示例:

  • 每次用户单击“确定”时,GUI都会调用您的函数。
  • 该程序无法得知用户是否会再次单击或单击后关闭计算机。

一个小玩笑: 对于您来说,实现您想要的唯一可能性是让函数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);
    }
    ...
}