一、堆区
堆区申请malloc函数,释放free,头文件stdlib.h,标准lib库,
void *任意类型的指针,一般放在函数头,函数类型
malloc申请堆区内存
void *malloc(size_t size);
功能:在堆区申请size字节的内存空间
参数:size 申请的内存大小
返回值:成功 申请到的内存的首地址
失败 NULL
void bzero(void *s,size_t n); 头文件是string.h
功能:清空s所指向的内存,并初始为零
参数:s 内存的首地址,n内存的大小
返回值:无
使用头文件string.h
void free(void *ptr);
功能:释放堆区内存
参数:ptr malloc的返回值
返回值:无
注意事项
1.malloc申请不一定成功,需要判断返回值,NULL为失败
2.申请的内存不一定干净,初始化bzero(px,4)
3.指针使用不能越界
4.指针使用完毕之后必须进行释放 free ,释放的是申请的首地址,不释放会内存泄漏,检查工具
valgrind --tool=memcheck ./a.out
少释放造成内存泄漏,多释放会 double free
5.内存free后,指针需要赋值为NULL, px=NULL;否则访问*px会段错误
C语言中,#开头的语句叫命令,不是语句,#if0,#endif
gcc编译过程
1.预处理 gcc -E xxx.c -o xxx.i
展开头文件,替换宏,去掉注释
2.编译 gcc -S xxx.i -o xxx.s
将C语言转换为汇编语言
3.汇编 gcc -c xxx.c -o xxx.o
将汇编语言转换成机器码
4.连接 gcc xxx.o -o xxx
指定程序入口位置
二、Makefile
make工程管理器 ==》 linux系统中管理多文件变成的工具,用于编程过程中多个资源文件之间的编译控制。符合大部分linux下软件的控制流程。
原理:根据Makefile脚本文件的规则执行批量处理命令
make 工程管理工具默认已经安装
对应的配置文件需要程序员指定:makefile Makefile
执行make操作会默认查找以上两个文件并执行文件规则
执行:
在在工程目录下执行make命令会自动按照makefile编译
makefile的文件编写规则:
目标文件:依赖文件
<TAB> 执行命令
make编译过程会根据工程文件中每个文件的 时间戳 来决定是否参与变异
make直接回车默认生成第一个目标文件
make xxx只生成xxx相关的目标,xxx只能是makefile的目标
makefile 的变量:
1、自定义变量
2、系统变量
3、自动变量
自定义变量 ==》 替换大量出现的重复字符串
格式:变量名称 = 目标字符串
使用:$(变量名称);
系统变量 ==》 系统内置的特定含义的变量
FLAGS = -Wall -c -g
自动变量 ==》$@ $< $^
$@ ⇒ 默认的目标文件名称
$< ⇒ 默认的第一个依赖文件名称
$^ ⇒ 默认所有的依赖文件
* 代表任意文件
% 代表一个同名文件
.PHONY: 伪目标
# 注释