内存管理API

操作系统中库里的函数是通过调用下层函数来实现的

	函数						 调用的库			调用的下层函数
	自动分配/释放内存auto_ptr		STL				调用了标准C++
	构造/析构 new/delete				C++				调用了标准C
	malloc/free						标准C			调用了POSIX
	brk/sbrk						POSIX			调用了Linux系统接口
	mmap/munmap					Linux系统接口 		调用了内核接口
	kmalloc/vmalloc					内核			调用了驱动
	get_free_page					驱动			。。。   

标准C

void* malloc(size_t size)
	申请堆内存的大小
void free(void* ptr)
	ptr为malloc申请内存的返回值,释放这块申请的内存空间

POSIX

	void* sbrk(intptr_t increment)
		increment:
			0 获取未分配前的内存首地址
			>0 增加内存空间
			<0 释放内存空间
		返回未分配内存的首地址,以字节为单位
		
	int brk(void* addr)
		功能:设置未分配内存的首地址,一般用来释放内存
		成功返回0,失败返回-1
	注意:brk/sbrk分配和释放内存只是修改了使用权,真正的映射工作是mmap/munmap完成的

Linux系统接口

	void* mmap(void* addr,size_t length,int prot,int flags,int fd,off_t offset)
		功能:把虚拟内存地址与物理内存或文件建立起映射关系
		addr:映射的虚拟地址,NULL操作系统会自动选择
		length:映射字节数
		prot:权限
		flags:映射标志
		fd:文件描述符
		offset:文件映射偏移值
		成功返回虚拟内存地址,失败返回0xffffffff
		
	int munmap(void* addr,size_t length)
		功能:取消映射
		addr:需要取消映射的内存首地址
		length:需要映射的字节数
		成功返回0,失败返回-1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值