摘要: 可见,函数的返回值为结构体类型,其返回值既不是“值传递”也不是通过“寄存器”回传。编译器在编译此类函数时,为其附加了一个指针参数(指向的地址在caller的堆栈上),且作为函数的第一个参数(函数本身的参数依次后移),函数语义上的返回值通过该附加的指针参数回传,而函数真正的返回值就是该指针。 ———— 阅读全文
posted @ 2020-03-19 22:03 zzfx 阅读(3651) 评论(0) 推荐(0) 编辑
摘要: 函数的返回值保存在内存的什么区域呢? 1、结构体大小不超过4字节,那么仍然使用EAX寄存器传递返回值2.结构体超过4字节但不等于8字节时,调用者将首先在栈上分配一块能容纳结构体的临时内存块,然后在传递完函数参数后将该临时内存块的首地址作为隐含的第一个参数最后(因为压栈顺序是从右到左)压栈,接下的动作 阅读全文
posted @ 2020-03-19 21:38 zzfx 阅读(1832) 评论(0) 推荐(0) 编辑
摘要: Oc的异常触发 异常是语言库、接口层面的错误; 信号时系统内核的错误; 作者:匿名用户链接:https://www.zhihu.com/question/20175801/answer/14225549来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 既然提问者已经补充 阅读全文
posted @ 2020-03-19 16:38 zzfx 阅读(801) 评论(0) 推荐(0) 编辑
摘要: 栈帧只是保存计算上下文的数据结构 重要的要素 1、参量s 2、返回地址(调用函数的下一条指令); 3、调用者的ebp; 4、局部变量; 寄存器: ebp:保存当前栈帧的基址,计算完成时,将这个以后的变量全部弹出; esp 计算完成后的回退操作: 1、将计算结果保存到寄存器; 2、将指令寄存器赋值为保 阅读全文
posted @ 2020-03-19 16:32 zzfx 阅读(262) 评论(0) 推荐(0) 编辑