C语言: 函数与内存

在开始本文前提出一个问题供大家思考:函数与内存的关系是什么?两者是如何紧密相连的?


程序执行流程:

    1.操作系统把物理硬盘代码load到内存。

    2.操作系统把C代码分成五个区

    3.操作系统找到main入口函数执行


每个函数都会被分配五个区,它们分别是栈区、堆区、全局区、文字常量区、代码区:

    1.栈区主要存放函数的参数值、局部变量值等,由编译器自动分配释放。

    2.堆区一般由程序员动态分配(malloc、calloc)使用,且必须由程序员释放,否则会造成内存泄漏。

    3.全局区主要存储全局变量、静态变量、未初始化全局变量、未初始化静态变量,程序结束由系统释放。

    4.文字常量区主要存放常量字符串,程序结束后由系统释放

    5.代码区主要存放函数体的二进制代码


堆栈的生长方向:

C语言: 函数与内存

 


函数调用模型:

C语言: 函数与内存