社区
C语言
帖子详情
如何获取物理内存地址
snowlily1981
2009-06-04 02:59:33
大家好,请教问题如下:
在linux环境下,用c开发,为某个指针malloc一段空间,此时指针指向的是虚拟地址,请问如何获取这个虚拟地址的物理地址?
ioremap函数可以把物理地址映射为虚拟地址,有无反过来映射的函数?
非常感谢您的关注
...全文
695
11
打赏
收藏
如何获取物理内存地址
大家好,请教问题如下: 在linux环境下,用c开发,为某个指针malloc一段空间,此时指针指向的是虚拟地址,请问如何获取这个虚拟地址的物理地址? ioremap函数可以把物理地址映射为虚拟地址,有无反过来映射的函数? 非常感谢您的关注
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
blh
2009-06-05
打赏
举报
回复
[Quote=引用 7 楼 blh 的回复:]
引用 5 楼 kakaja 的回复:
段地址 + 偏移量就是物理地址
对于X86实模式情况下,也是物理地址 = 段地址 *16 + 偏移量,呵呵
[/Quote]
不好意思,物理地址 = 段地址 *16 + 偏移量在早期的16位X86系统中,在32位X86实模式中使用物理地址 = 段地址 + 偏移量,儿在虚拟模式中段地址不再使用,段寄存器用于其他用途,对于非X86系统,如一些其如是CPU,不使用虚拟内存,代码中的地址直接回映射到真正的物理地址,更详细内容可以找一本相关CPU的手册看看
amossavez
2009-06-05
打赏
举报
回复
[Quote=引用 7 楼 blh 的回复:]
引用 5 楼 kakaja 的回复:
段地址 + 偏移量就是物理地址
对于X86实模式情况下,也是物理地址 = 段地址 *16 + 偏移量,呵呵
[/Quote]
学习了!
blh
2009-06-05
打赏
举报
回复
[Quote=引用 5 楼 kakaja 的回复:]
段地址 + 偏移量就是物理地址
[/Quote]
对于X86实模式情况下,也是物理地址 = 段地址 *16 + 偏移量,呵呵
ZXW0521
2009-06-05
打赏
举报
回复
不知道答案,来学习
kakaja
2009-06-05
打赏
举报
回复
段地址 + 偏移量就是物理地址
jiyan1221
2009-06-05
打赏
举报
回复
啊,关注。。。
snowlily1981
2009-06-05
打赏
举报
回复
[Quote=引用 1 楼 lingyin55 的回复:]
给个链接你看看有没有帮助
http://www.cn-teacher.com/fuwu/dn/bcjs/vccjc/200704/189097.html
[/Quote]
这个是NT的,有linux的吗?
snowlily1981
2009-06-05
打赏
举报
回复
指针返回的地址,也就是虚拟地址,是不是偏移量?或者说与偏移量有关系吗?
shiweifu
2009-06-04
打赏
举报
回复
学习
blh
2009-06-04
打赏
举报
回复
[Quote=引用楼主 snowlily1981 的帖子:]
大家好,请教问题如下:
在linux环境下,用c开发,为某个指针malloc一段空间,此时指针指向的是虚拟地址,请问如何获取这个虚拟地址的物理地址?
ioremap函数可以把物理地址映射为虚拟地址,有无反过来映射的函数?
非常感谢您的关注
[/Quote]
对于采用分页方式和虚拟内存的操作系统,你不需要知道,也不能知道,你程序中某个指针的物理地址(这个地址会随着内存页的换入换出变换),你的程序的内存是线性地址编码,当你的代码被执行时,才被OS根据规则映射到真正的物理内存中
在linux中,你可以在用户空间访问物理地址(需要root权限),FILE * fp = fopen("/proc/dev/mem", "wb+"),对这个文件指针fp进行读写操作就是对物理内存的读写操作
如果你希望想其他指针一样修改物理地址,那么你可以用mmap调用将你希望访问的物理地址映射到你的程序的逻辑地址再进行访问
lingyin55
2009-06-04
打赏
举报
回复
给个链接你看看有没有帮助
http://www.cn-teacher.com/fuwu/dn/bcjs/vccjc/200704/189097.html
虚拟内存与
物理内存
的联系与区别
操作系统有虚拟内存与
物理内存
的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理
地址
。程序能寻址的范围是有限的,这取决于CPU的
地址
线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的
物理内存
,就可能会出现很多问题: 因为我的
物理内存
时有限的,当有多个进程要执行的时候,都要给4G内存,很显然你内存小一点,这很快就...
虚拟内存到
物理内存
怎么映射
程序在编译时不可能知道装载后的
物理内存
地址
,实际上,程序编译生成的
地址
都是虚拟
地址
。在我们日常使用的 Linux 或者 Windows 操作系统下,程序并不能直接访问
物理内存
。为了解决这个问题,当程序装载后,会通过虚拟
地址
映射到真实的物理
地址
。 内存被分成固定大小的页(Page),然后再通过虚拟内存
地址
(Virtual Address)到
物理内存
地址
(Physical Address)的
地址
转换(Address Translation),才能访问实际存放数据的
物理内存
位置。 页表(Page Tabl..
linux查
物理内存
,linux查询
物理内存
的方法有哪些
今天有LINUX操作系统的用户跟学习啦小编说,如何用命令查看
物理内存
。所以下面就由学习啦小编给大家推荐一个方法!如何用命令查看LINUX
物理内存
一、查看
物理内存
执行如下命令即可查看
物理内存
,执行效果如下图所示:dmidecode -t memory | grep Size二、配置空间
物理内存
是没办法配置的,只能配置虚拟内存,在Linux系统即Swap分区。具体操作swap分区的方法如下:1、查看s...
详解:物理
地址
,虚拟
地址
,内存管理,逻辑
地址
之间的关系
物理
地址
:这里说的物理
地址
是内存中的内存单元实际
地址
,不是外部总线连接的其他电子元件的
地址
!物理
地址
属于比较好理解的,物理
地址
就是内存中每个内存单元的编号,这个编号是顺序排好的,物理
地址
的大小决定了内存中有多少个内存单元,物理
地址
的大小由
地址
总线的位宽决定!虚拟
地址
:虚拟
地址
是CPU保护模式下的一个概念,保护模式是80286系列和之后的x86兼容CPU操作模式,在CPU引导完操作系统内核后,操作系...
详解操作系统中虚拟内存与
物理内存
的关系
点击链接阅读更多: 一文理解虚拟内存、
物理内存
、内存分配、内存管理 - 知乎 目录 一、虚拟内存与
物理内存
1.1 虚拟内存 1.2 虚拟内存与
物理内存
二、C/C++中虚拟内存分配模型 2.1 C语言中内存分配模型 2.2 C++语言中内存分配模型 三、程序占用的内存是虚拟内存还是
物理内存
3.1 内存管理 3.1.1 内存管理概念 3.1.2 glibc内存管理器 3.1.3 内存管理器面临的困难 3.1.4 以堆为例讲解内存的申请与释放 3.2 代码占用的内存 3.2.
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章