编译器是如何翻译函数,函数调用的? 从汇编语言角度去解释 ?

wtjd 2009-08-25 05:12:51
编译器是如何翻译函数,函数调用的? 从汇编语言角度去解释 ?
...全文
202 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtjd 2009-08-31
  • 打赏
  • 举报
回复
大家都说得很对,

函数是放在代码段中,各线程只是用了函数的处理流程而已,各线程每一次的函数调用都有自己的函数栈,
因此函数内的局部变量,形参是不会有同步问题的,对于全局变量则存在同步问题。
因此大家写代码的时候,要注意线程与全局变量可能会存在的同步问题。

“函数 就是一段功能二进制代码和函数入口地址
调用 就是把参数写到对应函数的栈空间 保存现场 跳转到函数入口地址 ”
这句话说得很对,说出了函数的本质。
希望大家都能理解函数是什么,为什么几乎大多数计算机语言都有函数的概念,
我想函数无法对一段可复用逻辑的封装吧,这样一个大程序分配一段一段的小逻辑,
这样也是乎合人的大脑思考问题,分解问题的习惯的。

好了,就说这么多,把分给大家了。
wtjd 2009-08-31
  • 打赏
  • 举报
回复
push,pop
wtjd 2009-08-31
  • 打赏
  • 举报
回复
谢谢各位的回答,
结帖 给分,
2009-08-25
  • 打赏
  • 举报
回复
楼主多自己看一些编译结果和调用规范,就好理解了。
whg01 2009-08-25
  • 打赏
  • 举报
回复
所有的函数明在link阶段都会转换为相对的逻辑地址,运行时系统会载入exe文件,然后把函数放到相应地址的代码段。调用就是先把参数入栈,然后跳转到函数的地址。具体调用方式有2种。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wtjd 的回复:]
那如果有两个线程要调用同一个函数,是不是会有同步的问题?

[/Quote]
没有啊,代码是只读的,多少个线程访问都没问题
wtjd 2009-08-25
  • 打赏
  • 举报
回复



那如果有两个线程要调用同一个函数,是不是会有同步的问题?
  • 打赏
  • 举报
回复

push 参数
call 函数地址

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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