1.内存管理
1.1 进程中的内存区域划分
代码区 只读常理区 全局区 BSS 堆 栈
1.2 字符串存储形式之间的比较
字符指针,字符数组,字符动态内存
1.3 虚拟内存管理技术
Unix/Linux系统总的内存都是采用虚拟内存管理技术进行管理,即:每个进程都有0~4G的内存地址
(虚拟的并不是真实存在的),由操作系统负责把内存地址和真实的物理内存映射起来,因此,不同进程
的内存地址看起来是一样的,但是所对应的物理内存是不一样的。
用户空间 0~3G, 虚拟内核空间3~4G
1.4 段错误的由来
(1)scanf函数缺少 &
(2)空指针、野指针的使用
(3)师徒使用一个没有经过映射的虚拟地址可能引发段错误
1.5使用malloc申请动态内存的特性
需要额外的12个字节用于存储管理动态内存信息
采用链表的方式处理多个内存块
使用malloc千万不要越界
(2)使用malloc 申请内存的一般映射
一般说来,使用malloc申请较小的内存时,操作系统一次性分配33个内存页
#include <unistd.h>
getpid() 获取当前进程的进程号
cat / proc/ 进程号/maps 查看指定进程的内存分配情况
1.6使用free释放动态内存特性
1.7 内存处理相关函数
(1)getpagesize 函数
函数功能:
主要用于获取当前系统中一个内存页大小,一般为4kb
(2)sbrk函数
#inlcude <unistd.h>
void *sbrk(intptr_t increment);
(3)brk函数
int brk(void *addr);
sbrk 申请 brk 释放