parallel101 / course

高性能并行编程与优化 - 课件
https://space.bilibili.com/263032155
Other
3.62k stars 532 forks source link

第三节课、ppt第54页,用 [=] 来捕获传参的lambda表达式为什么占4个字节? #11

Closed qd1308504206 closed 2 years ago

qd1308504206 commented 2 years ago

image

按照我的理解是: 1:函数指针8个字节 2:带int变量fac,4个字节。应该是12个字节才对。

但是这个地方理解不清楚,还请彭哥帮忙解答一下

z-learner commented 2 years ago

这里应该并不涉及函数指针的问题,lambda表达式返回的是应该可以理解为一个重载了()操作符的匿名对象,这个对象中有一个n成员变量(值传递),所以这个对象占4个字节。 就好比自己随便创建一个类,这个类的大小只取决于类中所包含的成员变量,而与类的成员函数无关。

archibate commented 2 years ago

lambda的operator()是固定地址,不需要函数指针

无法顺畅的大口呼吸,是活着的最好证明

---原始邮件--- 发件人: @.> 发送时间: 2022年7月15日(周五) 晚上9:35 收件人: @.>; 抄送: @.***>; 主题: Re: [parallel101/course] 第三节课、ppt第54页,用 [=] 来捕获传参的lambda表达式为什么占4个字节? (Issue #11)

这里应该并不涉及函数指针的问题,lambda表达式返回的是应该可以理解为一个重载了()操作符的匿名对象,这个对象中有一个n成员变量(值传递),所以这个对象占4个字节。 就好比自己随便创建一个类,这个类的大小只取决于类中所包含的成员,而与类的成员函数无关。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

qd1308504206 commented 2 years ago

懂了。thank you