linux brk、sbrk、mmap和munmap系统调用

本文介绍了Linux系统调用brk, sbrk用于动态分配内存的基本原理和使用,以及mmap进行内存映射的方式。详细讲解了mmap的参数和功能,并探讨了munmap用于解除映射的机制。同时,文章通过实例分析了进程的虚拟内存区域结构及其权限设置。" 133613937,20039153,MySQL主从复制集群配置详解,"['数据库管理', 'MySQL', '数据库复制']
摘要由CSDN通过智能技术生成

sbrk/brk重新指定数据段的结束位置。sbrk(增量),增量可正可负,也可以是0,,都返回原来的数据段结束地址,失败返回-1,。brk(地址),返回0或者-1。头文件<unistd.h>。sbrk(0)可以取得当前结束地址。没有使用的虚拟内存地址,操作系统就没有映射到物理内存,如果试图访问会差生段错误。指定新的结束位置后如果有整个内存页被空闲出来,这一页就立即被解除映射。

<span style="font-size:18px;">#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
	cout << "pagesize:" << getpagesize() << endl;
	int *p = (int*)sbrk(0);
	cout << p <<endl;
	
	//int n = *p;//出现段错误
	brk(p+8);//终点后移8*4个字节,操作系统把扩展的这段虚拟内存映射到物理内存,但映射以页为基本单位,实际映射的内存会是一页。
	for(int i = 0; i < 1025; ++i)//这里小于等于1024的话都不会出现段错误
	{
		p[i] = i;
	}
	
	for(int i = 0; i < 1025; ++i)
	{
		cout << p[i] << " ";
	}
	cout << endl;
	
	return 0;
}</span>


18个数的时候



1024个数的时候



1025个数的时候

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值