网站页面如何设计,企业公司网站模板,打网站显示域名解析错误,2018年网站开发语言排行1.c程序在内存中的布局
代码段#xff08;Code Segment#xff09; 位置#xff1a;通常位于内存的最低地址。 用途#xff1a;存储程序的可执行指令。 特点#xff1a;只读#xff0c;防止程序运行时被修改。数据段#xff08;Data Segment#xff09; 位置#xf…1.c程序在内存中的布局
代码段Code Segment 位置通常位于内存的最低地址。 用途存储程序的可执行指令。 特点只读防止程序运行时被修改。数据段Data Segment 位置紧随代码段之后。 用途 存储全局变量和静态变量。 包含初始化的全局变量和静态变量已初始化的数据。 包含未初始化的全局变量和静态变量未初始化的数据通常初始化为零。 特点数据段分为已初始化和未初始化两部分。BSS段Block Started by Symbol 位置数据段的一部分通常位于数据段的末尾。 用途存储未初始化的全局变量和静态变量。 特点在程序启动时由操作系统自动初始化为零。堆空间Heap 位置数据段之后栈空间之前。 用途动态内存分配。 特点 从低地址向高地址生长。 可以动态扩展但扩展有限受系统内存限制。 程序员通过malloc、calloc、realloc等函数手动管理。栈空间Stack 位置通常位于内存的高地址区域。 用途 存储函数调用时的局部变量、函数参数和返回地址。 管理函数调用的执行流程。 特点 从高地址向低地址生长。 自动管理具有“后进先出”LIFO的特性。 每个函数调用都会在栈上分配一个栈帧包含局部变量和返回地址。内核虚拟内存Kernel Virtual Memory 位置通常不直接显示在用户程序的内存布局中但存在于操作系统内核中。 用途操作系统内核的运行环境。 特点与用户程序隔离提供安全性。
±---------------------------------- | 内核虚拟内存 | ±---------------------------------- | 栈空间Stack | | 高地址 | ±---------------------------------- | 堆空间Heap | | 低地址 | ±---------------------------------- | 数据段Data | | 包括BSS段 | ±---------------------------------- | 代码段Code | | 低地址 | ±----------------------------------
2. 递归
递归要有三要素 1.要有递归体即函数自己调用自己的语句 2.递归的出口如果不给递归设置结束条件那么就一定会出现栈溢出的情况 3.递归的深度每次递归都会导致栈帧进栈如果深度过大那么栈会溢出
long jiechen(int n) {//先写边界条件if (n 1) {return 1;}//再写递归体return n * jiechen(n - 1);
}
int main() {long result jiechen(5);printf(%d, result);return 0;
}递归的优点就是简洁清晰 递归的缺点就是栈溢出风险高效率低内存消耗大难以调试难以思考
汉诺塔问题递归解法
int hanoi(int n) {if (n 2) {return 3;}return hanoi(n - 1) 1 hanoi(n - 1);
}int main() {//print_hello(5);//long result jiechen(5);int result hanoi(3);printf(%d, result);return 0;
}