Fork me on Github Fork me on Gitee
摘要: 栈帧 概念 栈帧:也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构,每次函数的调用,都会在调用栈(call stack)上维护一个独立的栈帧(stack frame) 栈帧的内容 函数的返回地址和参数 临时变量:包括函数的非静态局部变量,以及编译器自动生成的其他临时变量 函数调用上下文 阅读全文
posted @ 2022-11-15 11:16 Tenerome 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 内存管理 stdlib库中有几个内存管理相关的函数 | 序号 | 函数和描述 | | | | | 1 | void *calloc(int num, int size);在内存中动态地分配 num 个长度为size 个字节 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*si 阅读全文
posted @ 2022-11-15 10:05 Tenerome 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 可变参数 stdarg.h 头文件提供了实现可变参数功能的函数和宏。具体步骤如下: 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数,一般传入参数的个数。 int func(int num,...){ } 在函数定义中创建一个 va_list 类型变量,它是一个参数列表,专门用来存参 阅读全文
posted @ 2022-11-14 16:59 Tenerome 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 预编译器 预编译器就是之前学的预编译指令的执行者 gcc -E test.c -o test.i 生成预编译文件就是翻译#指令 比如#include<stdio.h>就是把整个stdio.h头文件和项目文件连接 所用预编译指令 | #define | 定义宏 | | | | | #include | 阅读全文
posted @ 2022-11-14 15:10 Tenerome 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 文件读写 打开文件 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件 FILE *fopen( const char *filename, const char *mode ); filename 是文件的路径,用来命名文件,访问模式 mode 的值可以是下列值中的一个: | 模式 | 阅读全文
posted @ 2022-11-13 14:09 Tenerome 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 输入输出 printf()和scanf() 用来格式化输入输出,它们都是有返回值的 int printf()返回输出的内容的长度 #include<stdio.h> int main(){ int c=printf("abcdefg\n"); printf("%d",c); } 输出:8 转义字符占 阅读全文
posted @ 2022-11-12 22:25 Tenerome 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 字节对齐与排序 字节对齐的原因与字节排序 取自:VisualEther 原文档下载:Gitee _packed _packet用于结构体中变量在内存中的对齐.如 typedef struct test_s{ int i; char a[3]; char b[5]; char c; }test_t; 阅读全文
posted @ 2022-11-12 15:47 Tenerome 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 结构体与共用体 结构体 是一个可以存储多个不同类型的变量的结构,类似于面对对象中的类(只有成员变量的类). struct tag { member-list member-list member-list ... } variable-list ; tag 是结构体标签。 member-list 是 阅读全文
posted @ 2022-11-12 14:20 Tenerome 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 函数指针与回调函数 函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同 如: #include<stdio.h> int max(int x,int y){ return x>y?x:y; } int main(){ int (*funp)(int,int); funp= 阅读全文
posted @ 2022-11-11 22:33 Tenerome 阅读(50) 评论(0) 推荐(0) 编辑
摘要: C语言反汇编用到的AT&T x86汇编语法 参考:CSDN1,CSDN2 默认gcc -S汇编出的,以及反汇编出的,都是AT&T x86代码,可以用-masm=intel指定为intel x86汇编格式 gcc -S test.c -masm=intel -o test.s 有时编译器会自动优化汇编 阅读全文
posted @ 2022-11-11 20:50 Tenerome 阅读(203) 评论(0) 推荐(0) 编辑