Linux虚拟内存映射之brk/sbrk,map/munmap

本文介绍了Linux虚拟内存的概念,包括逻辑地址与物理地址的映射,以及两种内存分配方式:brk/sbrk函数用于动态分配和释放堆内存,mmap/munmap则用于内存映射。讨论了brk/sbrk的使用,如sbrk(0)获取未映射空间的首地址,并通过调整指针进行内存分配。同时提到了mmap用于匿名映射和文件映射,及其参数详解。
摘要由CSDN通过智能技术生成

一.关于虚拟内存

         问题:

                   一个程序不能访问另外一个程序的地址指向的空间.

         理解:

                   1.每个程序的开始地址ox8048000(?可由objdump 反汇编得到)

                   2.程序中使用的地址不是物理地址,而是逻辑地址(虚拟内存).

                     逻辑地址仅仅是编号.编号使用int 4字节整数表示.

                     4294967296=4G

                     每个程序提供了4G的访问能力(32位机,下同)

         问题:

                   逻辑地址与物理地址关联才有意义:过程称为内存映射.

         背景:

                   虚拟内存的提出:禁止用户直接访问物理存储设备.

                   有助于系统的稳定.

                                              

         结论:

                   虚拟地址与物理地址映射的时候有一个基本单位:至少会映射4K

                                     4k  1000 内存页.

                   段错误:无效访问. 那段内存没有映射

                   合法访问:比如malloc分配的空间之外的空间可以访问,但访问非法.因是越界访问

 

                   内存访问分两种:一个是可以访问,但不一定是合法的,比如malloc几个字节,

                   内存会给你映射4K空间,int*p=malloc(0); *(p+1000)=9999;理论说这是可以访问,但是非法的,它可能破坏维护malloc分配的数据结构,就跟虚表指针一样。

 

二.虚拟内存的分配

                   栈:编译器自动生成代码维护

                   堆:地址是否映射?映射的空间是否被管理?

1.brk/sbrk内存映射函数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值