2014-06-10 8 views
1
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와 같습니다. 그런데 왜 그들은 스택에 있지 않고 힙이 아닌가? 는 그리고, 아마도,이 같은libev에서 기본 루프가 스택에있는 이유는 무엇입니까?

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

ev_default_loop입니다 그러나 FUNC 돌아 오면, 그 스택 정리하고있다. 그래서 정말 안전합니까?

답변

0

EV_DEFAULT는 전역 변수 일 수 있으며 ev_default_loop도이 변수를 반환합니다. 그래서 스택에 있지 않습니다.

추가로, 호출자가 사용하는 스택 주소를 반환하는 위험한 행위를 취합니다.