在libev中,为什么默认循环在堆栈上?

时间:2014-06-10 13:10:11

标签: c networking libev

    int main()
    {
        struct ev_loop *loop1 = EV_DEFAULT;
        struct ev_loop *loop2 = ev_default_loop(0);
        printf("%ld\n%ld\n", (long)loop1, (long)loop2);
        return 0;
    }

是的,loop1等于loop2。但为什么他们都在堆栈上,而不是堆? 并且,也许ev_default_loop是这样的,

    int* func()
    {
        int a;
        return &a;
    }

但是在func返回后,它的堆栈已经被清理掉了。那真的很安全吗?

1 个答案:

答案 0 :(得分:0)

EV_DEFAULT可能是全局变量,ev_default_loop也会返回此变量。所以,没有堆栈。

另外,对于调用者使用返回堆栈地址采取危险的做法。