随笔分类 - C
摘要:函数调用栈为ABI规范的内容,不同的操作系统有不同的约定。 Arm+Linux平台下函数调用过程的研究 1. C语言代码: 2. C语言代码反汇编:arm-linux-objdump -D -S Test > dump 3. 函数调用及返回过程,fp指针(当前函数栈针基地址)和sp指针(指向栈顶的指
阅读全文
摘要:①main函数原型: int main(int argc, char* argv[], char* env) ②mian函数返回值: main函数的返回值是返回给父进程的,父进程调用下面函数来获取进程的退出码 pid_t wait(int* status); pid_t waitpid(pid_t
阅读全文
摘要:1. 变参函数简单示例 2. 变参函数的实现原理 #define va_list void* #define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start)) #define va_arg(arg, typ
阅读全文
摘要:①代码在可执行程序中的对应关系 ②文件布局在内存中的映射 ③各个段的作用 1. 堆栈段在程序运行后才正式存在,是程序运行的基础 2. .bss段存放的是未初始化的全局变量和静态变量 3. .text段存放的是程序中的可执行代码 4. .data段保存的是那些已经初始化了的全局变量和静态变量 5. .
阅读全文
摘要:①数组指针和指针数组 1. 数组指针用于指向一个数组,数组名是数组首元素的地址(数组名为数组首元素类型且指向首元素的指针,如int array[5] ,array为指向array[0]的指针且类型为int*) 2. 指针数组是一个普通的数组,数组中每个元素都是指针 ②易混淆的定义 1. 定义一个数组
阅读全文
摘要:①memcpy()和memmove()都是C语言中的标准库函数,定义在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: 他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。 ②内存重叠有以下两种
阅读全文
摘要:①柔性数组即数组大小待定的数组 ②C语言中结构体的最后一个元素可以是大小未知的数组 ③C语言可以由结构体产生柔性数组 一个简单的柔性数组的示例:
阅读全文
浙公网安备 33010602011771号