나는 코 루틴과 C를 계속하려고 노력 중입니다. 나는 스파게티 더미가 필요하다는 것을 깨달았습니다. 새로운 call-stack 내에서 함수를 실행할 수 있습니까? 물론 단일 스레드 내에서. 새롭고 분리 된 콜 스택을 만들고 그것에 대한 코드를 어떻게 수행 할 수 있습니까?C로 스파게티 스택 만드는 법?
3
A
답변
0
나는 여전히 연속성에 대해서는 확신하지 못하지만 적어도 coroutine에서는 C 내에서 이것을 수행 할 수있는 좋은 방법이 없다. 이것은 C 추상화를 벗어 났기 때문이다. setjmp/longjmp
범위가 C++/Objective-C 예외 시스템을 방해 할 수 있습니다. makecontext/swapcontext
은 더 이상 사용되지 않습니다. 일부 시스템은 여전히 기능을 지원하지만 적어도 Apple OS는 더 이상 지원하지 않습니다.
내게 유일한 해결책은 libtask
library입니다. 아키텍처 고유의 어셈블리 코드를 사용하여 레지스터 상태를 저장 및 복원하고 호출 스택을 관리합니다. 모 놀리 틱 스택을 사용하고 있고 크기 제한이 있다고 생각합니다. 그러나 어쨌든, 신뢰할 수있는 작업을 찾을 수있는 유일한 솔루션입니다.
내 생각에 Clang's Segmented Stack (또는 GCC의 스플릿 스택) 기능은 C 레벨에서 매우 일반적인 코 루틴 지원을 가능하게합니다. 그리고 나중에 LLVM에 코 루틴 코드를 자유롭게 작성하려고합니다.
5
체크 아웃 makecontext/swapcontext.
이들을 사용할 수 없다면 setjmp/longjmp를 사용할 수 있지만 좀 더 복잡합니다.
2
Windows 사용자는 Fibers API을 볼 수 있습니다. Evil Otto의 대답은 이식성/POSIX 호환 성입니다.
관련 문제
- 1. C의 스파게티 스택
- 2. 캐스팅 맵 만드는 법?
- 3. iphone의 스크롤보기 만드는 법
- 4. Doctrine에서 관계를 만드는 법
- 5. 스크롤바 만드는 법?
- 6. 안드로이드에서 스프라이트를 만드는 법
- 7. xml에 줄을 만드는 법
- 8. 자바에서 인터페이스를 만드는 법
- 9. 볼록한 다각형을 만드는 법
- 10. 8051 에뮬레이터 만드는 법
- 11. 라이트 박스를 만드는 법
- 12. MP3 플레이어 만드는 법?
- 13. UIWebView에서 UIImage를 만드는 법
- 14. 스파게티 PHP의 정의?
- 15. 조립식 언어 스파게티 코드
- 16. = 스파게티 코드를 종료 하시겠습니까?
- 17. 스파게티 코드의 특성은 무엇입니까?
- 18. java tracing 스파게티 코드
- 19. 레일 3에 'will_paginate'lazyload 만드는 법?
- 20. 자바에서 메일 서버를 만드는 법
- 21. PHP에서 날짜 제한 만드는 법?
- 22. PuTTY ssh에서 파이프 만드는 법?
- 23. 정에서 그리드 레이아웃을 만드는 법
- 24. 델파이 애플리케이션에서 그래프를 만드는 법
- 25. 로그 북 모듈 만드는 법
- 26. IE7 : TD 플로트 만드는 법?
- 27. 솔라리스에서 메뉴 파일을 만드는 법
- 28. Grails : 클리어 버튼을 만드는 법?
- 29. 구글 스톱 패드를 만드는 법
- 30. PHP : 객체 변수를 만드는 법?