回调函数的堆栈问题,向大家请教

jack_wq 2010-03-02 09:11:02
假设有两个线程,分别是A、B
A线程调用B线程提供的函数可能会有下面两种方式:
1、A直接调用B提供的API函数,A通过包涵B中该函数的头文件实现
2、A通过B提供的函数的地址调用B提供的函数(所谓的回调)

通过方式1实现,函数执行使用的应该是A的堆栈,通过2方式调用,函数执行使用的是B的堆栈还是A的堆栈呢?为什么?
...全文
396 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack_wq 2010-03-03
  • 打赏
  • 举报
回复
OK,明白了,谢谢各位了~
东大坡居士 2010-03-02
  • 打赏
  • 举报
回复
mark 学习了~~~~~~~~~~~
lvshaoqing 2010-03-02
  • 打赏
  • 举报
回复
谁调用就是谁的。。。。。。。。
mLee79 2010-03-02
  • 打赏
  • 举报
回复
函数是全局的, 堆栈是属于线程/进程的....
wx376752150 2010-03-02
  • 打赏
  • 举报
回复
引用 7 楼 gaslinux 的回复:
楼上有些同学提到函数的堆栈,函数怎么可能会有自己的堆栈呢,函数调用的时候是会有入栈出栈的操作,不过这个栈是属于线程的。

楼主说线程提供的函数,这种说法真是相当奇怪,我是不明白是什么意思,不过回调函数和普通的函数调用是没有区别的,用到的栈当然是调用它的线程的栈。
同感。。。
gaslinux 2010-03-02
  • 打赏
  • 举报
回复
楼上有些同学提到函数的堆栈,函数怎么可能会有自己的堆栈呢,函数调用的时候是会有入栈出栈的操作,不过这个栈是属于线程的。

楼主说线程提供的函数,这种说法真是相当奇怪,我是不明白是什么意思,不过回调函数和普通的函数调用是没有区别的,用到的栈当然是调用它的线程的栈。
bobo364 2010-03-02
  • 打赏
  • 举报
回复
好久没人讨论这些系统上的理论问题了,mark了
bladesoft 2010-03-02
  • 打赏
  • 举报
回复
你用哪个函数就要建立哪个函数的堆栈。这和线程没有关系的。
fireyou 2010-03-02
  • 打赏
  • 举报
回复
涨知识了。。
回复内容短?n
james_hw 2010-03-02
  • 打赏
  • 举报
回复
引用楼主 jack_wq 的回复:
假设有两个线程,分别是A、B
A线程调用B线程提供的函数可能会有下面两种方式:
1、A直接调用B提供的API函数,A通过包涵B中该函数的头文件实现
2、A通过B提供的函数的地址调用B提供的函数(所谓的回调)

通过方式1实现,函数执行使用的应该是A的堆栈,通过2方式调用,函数执行使用的是B的堆栈还是A的堆栈呢?为什么?


函数自己的堆栈,和线程A、B没关系
cy330206 2010-03-02
  • 打赏
  • 举报
回复
函数执行堆栈应该都有,首先函数活动要为自己的局部变量开辟堆栈,然后执行B函数是也要为该函数开辟一定的堆栈为活动的开销
dubiousway 2010-03-02
  • 打赏
  • 举报
回复
线程提供的函数 是什么
macrojj 2010-03-02
  • 打赏
  • 举报
回复
能有代码说明下吗?

函数在哪个线程运行 就用哪个线程的栈。
macrojj 2010-03-02
  • 打赏
  • 举报
回复
很想知道什么是 线程提供的函数?
haierpro 2010-03-02
  • 打赏
  • 举报
回复
函数定义和线程有什么关系?难道还有关键字说明一个函数属于哪个线程?
函数是可以被多个线程同时调用的,只是要考虑可重入性。
回调函数一般是对于多个单独编译模块(比如库)之间的函数调用来说的,用函数指针实现,就不需要知道函数名了,这样就有很强的通用性。
musiclee 2010-03-02
  • 打赏
  • 举报
回复
3楼说的应当是调用函数时都有相应的寄存器栈操作吧?
对于函数来说 只不过是代码而已 谁调用无所谓,编译成汇编在函数的开头大多都有保存堆栈操作,说A进程调用B进程的函数 ,就想A调用自己的函数一样(但函数内部有对全局变量操作的话有可能会操作B的内容)。就想多个进程共用资源(被调用函数)一样
我想是这样吧。。。
rularys 2010-03-02
  • 打赏
  • 举报
回复
引用 13 楼 jack_wq 的回复:
是不是说函数无论在什么地方定义都没有关系呢?无论是在哪个线程定义的,函数被调用时所使用的堆栈都是调用该函数线程的堆栈,而与该函数在哪个线程定义的没有关系。
不知道我理解的对不对?


没有所谓的“线程定义的函数的说法”,代码在哪个线程中运行,用的就是哪个线程的资源
yin138 2010-03-02
  • 打赏
  • 举报
回复
楼上同仁正解
线程是运行时的概念,函数,可以理解为静态的概念
A线程运行静态代码时,需要为代码运行时空间负责。
jack_wq 2010-03-02
  • 打赏
  • 举报
回复
是不是说函数无论在什么地方定义都没有关系呢?无论是在哪个线程定义的,函数被调用时所使用的堆栈都是调用该函数线程的堆栈,而与该函数在哪个线程定义的没有关系。
不知道我理解的对不对?
赵4老师 2010-03-02
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧