摘要: 函数调用的栈帧 每一个函数都有一块栈空间,叫做栈帧,研究函数调用栈其实就是研究主调函数与被调函数栈帧之间的问题 栈帧的作用是保存并传递被调函数的参数、被调函数的返回地址(也就是主调函数中调用完被调函数后应该执行的下一句)、被调函数的返回值、保存函数的局部变量 AMD64 CPU 提供了2个与栈相关的 阅读全文
posted @ 2023-05-25 20:17 alexlance 阅读(192) 评论(0) 推荐(1) 编辑
摘要: 动态内存分配复习 为什么要使用动态内存分配: 在声明数组时,必须用一个编译常量指定数组长度,但是,数组的长度往往只有在运行的时候才能被确定,这是因为它所需要的内存空间取决于输入数据,但是容易浪费空间,又或者容易溢出 malloc和free: malloc执行动态内存分配,free执行释放内存,当使用 阅读全文
posted @ 2023-05-24 20:18 alexlance 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stddef.h> 4 #include<stdarg.h> 5 float average(int values_,...) { 6 va_list var_; 7 int i = 0; 8 f 阅读全文
posted @ 2023-05-24 18:09 alexlance 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 关于finalshell 运行ifconfig ,观察虚拟机ens33的代码,得出计算机IP,然后选择用SSH连接。 命令行基本格式: commmand -option(选填) parameters(选填) 选项 路径(参数) 路径:第一个/表示根目录,之后的/表示层级分隔符 命令行1:ls: 显示 阅读全文
posted @ 2023-05-24 17:58 alexlance 阅读(100) 评论(0) 推荐(0) 编辑
摘要: C语言结构和联合复习 定义 聚合数据类型能够同时存储一个以上的单独数据类型,C语言提供了两种类型的聚合数据类型,即数组和结构,数组存储的是相同类型元素的集合,而结构则可以是不同元素的集合,但与数组不同,结构体不能通过下标访问,这是因为数组各元素长度相同,而结构体各元素长度不等,结构体类型属于标量类型 阅读全文
posted @ 2023-05-24 17:55 alexlance 阅读(4) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdarg.h>int main() { const char* a = "hello world"; char b[100] = "message"; printf("%s 阅读全文
posted @ 2023-05-24 08:16 alexlance 阅读(8) 评论(0) 推荐(0) 编辑
摘要: C初级指针复习: 内存: 内存中的每一个位置都由一个独一无二的地址标识 每一个内存位置都包含一个值 值和类型: 不能简单地通过检查一个值的位来判断它的类型,为了判断值的类型(以及它的值),必须观察程序中这个值的使用方式,值的类型并非值本身所固有的一种特性,而是取决于它的使用方式 NULL指针: NU 阅读全文
posted @ 2023-05-20 19:56 alexlance 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 程序的执行可以理解为连续的函数调用,每一个用户态(用户态指的是CPU指令集权限ring 0,用户只能访问常用CPU指令集,在应用程序中运行)进程都对应一个调用栈结构,当一个函数执行完毕后,会自动回到原先调用函数的位置(call指令)的下一步命令并执行,堆栈结构的作用是保存函数返回地址、传递函数参数、 阅读全文
posted @ 2023-05-03 22:40 alexlance 阅读(162) 评论(0) 推荐(0) 编辑