맘대로 주고받는거 같던데
[%] std::function은 박싱에 가상호출 하는거지?
ㅇㄹ(rerereq)
2018-12-22 22:41
추천 0
댓글 15
다른 게시글
-
Recursion님 Prolog 코드 요약해주실 수 있나요?[질문] 기괴공학도(mecheng98) | 18.12.22추천 0
-
패키지에 document comment 추가했음[%] ㅇㄹ(rerereq) | 18.12.22추천 0
-
이건 애니짤로 쳐야함? [5][⚠애니짤] liliilli(125.188) | 18.12.22추천 0
-
TSTL v2.1 & TGrid v0.1 릴리즈했습니다. [1][%] 삼촌(218.145) | 18.12.22추천 5
-
Rust 재미있는 trait 문제 [2][연재] ㅇㄹ(rerereq) | 18.12.22추천 1
-
테조스에서 오카멜 교육 진행함 [3][%] Recursion(recursion) | 18.12.22추천 0
-
플밍 언어 만드는데 필요한 지식이 담긴 책이 [2][질문] 익명(203.226) | 18.12.22추천 0
-
uefi 단점이 있네[%] ㅇㄹ(rerereq) | 18.12.22추천 0
-
아이디어가 떠올랐다 [5][%] 기괴공학도(mecheng98) | 18.12.22추천 0
-
저번 네이버에서 사용자 파라매터를 get으로 보내서 까였잖아.[%] 다메즈마(211.36) | 18.12.22추천 0
박싱이 뭐고 가상호출을 뭐지 - return 0;
동적할당해서 가상호출 하는거지?
그냥 함수포인터로 처리되는 경우 많은데 그러면 그냥 value 복사로 되지 않나 - return 0;
최적화되면 몰라도 클로저가 들어올 가능성이 있는 코드면 가상호출말곤 답없지않냐
클로저여도 그냥 객체 값복사하면 될텐데 - return 0;
집에가면 코드 보여드림 ㄱㄷ
짤같은거 가상호출없이 가능함?
C++ 에서 클로져 달린 람다 함수는 그냥 function object 임. 그래서 저 경우에는 내 생각에 (근데 어떻게 될지는 모름 컴파일러가 워낙 신나는 분야라) z 의 값을 멤버로 가지는 클래스의 인스턴스를 하나 만들고 그거 호출할 것 같음. - return 0;
그러니까 저기서 add랑 클래스 맴버함수랑 시그니쳐가 다르자너
그 다른 놈들을 똑같이 호출할려면 가상호출써야되는거고
그리고 클로저 객체마다 크기가 다르니까 얘네도 똑같이 다룰려면 void*마냥 동적할당해서 포인터로 끌고다녀야하는거 아니냐
물론 컴파일러가 죄다 함수포인터로 최적화 해버릴 가능성도 있지만 그건 논외로 두고 말이지
글쎄 내 생각에 객체를 그냥 스택에 박고 멤버 함수의 포인터만 바꾸면 될 것 같은데 - return 0;
function이 정의되는 순간 text 메모리에 코드가 저장되는데 동적할당이라는 개념이 들어갈 건덕지가 있나
function 의 state 의 경우 따로 관리가 필요하고 저 경우에는 state 의 life cycle 을 관리하기가 애매하니까 동적 할당을 하지 않느냐 그런 얘기 - return 0;