c语言函数及AAPCS的理解-基于arm分析
本文为个人学习中的笔记整理,大多是自己的理解,存在较多口语化描述,可能存在一些错误或描述不准确的地方,欢迎大家指正,共同学习。
1.函数是什么-C语言执行或编译的最小单位
我们在编写C语言程序的时候,并没有办法脱离函数编程,c编译器也是以函数为单位对文件进行编译,通常C语言编程的入口为main,存在于函数内的语句或指令会被执行,C语言编译器并不允许任何可被编译为汇编指令的语句出现在函数之外,我们可以这样理解,我们会写的C语言程序会以函数为单位被打包为一个一个的指令块(本文暂不讨论数据编译后的存储),通过反汇编来看一下函数在编译之后的存储形式:
对如下函数编译之后进行反汇编:
void test3 (void)
{
}
void test2 (void)
{
test3();
}
void test1 (void)
{
test2();

本文探讨C语言函数的编译原理,以ARM架构AAPCS为背景,分析函数如何转换为汇编指令,以及栈、堆、全局数据段的内存管理。C语言函数以栈维护局部变量,寄存器用于传参和返回值,AAPCS规定了资源分配规则,确保调用者和被调用者之间的协调。实验展示了传参、返回值和局部变量的处理方式。
最低0.47元/天 解锁文章
2530

被折叠的 条评论
为什么被折叠?



