linux环境编程学习

在开头,我应该反思一下,之前学习博客写的都不怎么勤。主要是因为我觉得写博客这种东西很没用,不过是像流水账一样把之前学过的东西再写一遍。但现在想想,我应该调整这一观念,用博客记录要学的东西,而不是已经学过的东西。

函数:
void *sbrk(intptr_t increment);
功能:根据增量参数调整指针的位置。
increment:增量
0 获取指针的位置
<0 取消映射
>0 映射内存
返回值:该指针原来的位置

int brk(void *addr);
功能:直接用addr的值修改指针的位置
返回值:本次移动的多少个字节
>位置指针,映射内存
<位置指针,取消映射
int 成功返回0,失败返回-1
brk/sbrk都有单独映射,取消映射的功能,但配合使用最方便。

void *mmap(void *addr,size_t length,int prot,int flags,int fd,off_t offset)
功能:映射虚拟内存与物理内存,sbrk和brk底层调用的就是它们。
addr:映射内存区域的起始地址,可以自己指定,如果是NULL则系统帮你指定
length:映射的字节长度
prot:映射的权限
PROT_EXEC
PROT_READ
PROT_WRITE
PROT_NONE
flags:映射标志
MAP_FIXED 如果提供的addr无法映射,则失败,系统不会自动调整。
MAP_SHARED 对映射区域的写操作直接反映到文件中。
MAP_PRIVATE 对映射区域的写操作只反映到文件的缓冲区中,不会真正写入文件
MAP_ANONYMOUS 将虚拟映射到物理内存,而不是文件,忽略fd等参数。
MAP_DENYWRITE 拒绝文件的写入操作
MAP_FILE
fd:文件描述符
offset: 文件的偏移量
返回值: 成功返回映射后的内存地址,失败返回0xFFFFFFFF

int munmap(void *addr,size_t length);
功能:取消映射
addr: 映射内存区域的起始地址
length: 内存字节数
返回值: 成功返回0,失败返回-1

内存管理总结
1.mmap/munmap 底层不维护任何东西,只返回一个映射后的内存首地址所映射的内存位于堆中
2.brk/sbrk底层维护一个指针,记录所映射的内存结尾,所映射的内存也位于堆中,底层调用的是mmap/munmap。
3.malloc/free底层维护一个双向链表和必须的控制信息,所映射的内存也位于堆中,底层调用的是brk/sbrk

任务设计一个基于顺序表的栈 未完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值