c语言问题,请问如何用c读取32或64位地址.

fnaps 2003-10-16 05:56:08
c只能读到64M的内存地址,超过了请问如何读取,还有一个问题就是上面讲了,请知道的详细讲一下.可不要说用c++哦.
...全文
230 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
B828 2003-11-11
  • 打赏
  • 举报
回复
呵呵,只是感觉,不好意思,我没有对Linux做过研究
fierygnu 2003-11-08
  • 打赏
  • 举报
回复
感觉?
双杯献酒 2003-11-07
  • 打赏
  • 举报
回复
同意
B828(龙天)

在DOS时代(实地址模式)
near 指针范围是 64K (不是64M)
far 指针 是 1M (20位)
B828 2003-11-07
  • 打赏
  • 举报
回复
我对于Linux的内存管理模式不是很了解,我感觉应该是有far的。你可以参考一些Linux论坛
ks9960 2003-11-05
  • 打赏
  • 举报
回复
有high人再介绍一下吗?或者提供些资料link。
fierygnu 2003-11-05
  • 打赏
  • 举报
回复
unix里没有far、near这些概念。
fnaps 2003-11-05
  • 打赏
  • 举报
回复
那也就是说在linux下,far还是有用的?
goodboyyxh 2003-11-04
  • 打赏
  • 举报
回复
不用你考虑这么多吧!
qufan 2003-11-04
  • 打赏
  • 举报
回复
学习!!!
fierygnu 2003-11-04
  • 打赏
  • 举报
回复
linux是32位的,当然是4G了。
B828 2003-11-04
  • 打赏
  • 举报
回复
其实这个问题需要看C的编译器是基于什么操作系统以及什么硬件系统之上

在Dos、Intel 8086兼容处理器的实模式、Turbo C或者Microsoft C编译器,一个普通指针是16位的,只能够访问64K的内存空间。
在far模式下,指针是32位的,增加的16位是段的位置,但是它能够直接访问的内存也只是1M的,因为这是受到8086及其兼容处理器的内存访问限制的,具体做法是将16位的段左移4位,然后和16位的偏移相加,最后形成一个20位的地址,也就是1M。

在Windows、Intel 80386兼容处理器的保护模式、Borlandc C++或(Builder)、Microsoft Visual C++系列等等编译器下,一个普通指针是32位的,它能够访问高达4G的内存空间。
在far模式下,指针是48位的,增加的16位是段描述,但是由于Windows的平坦内存管理模式,段对于程序员来说(包括汇编语言程序员)是透明的,也就是说,在Windows下,far模式是没有作用的。不过由于任何一个指针的寻址空间都是4G,我决得也应该够用了。当然,由于Windows是保护模式,你的指针偏移不能够超过段的界限。一般不用关心。
fnaps 2003-11-04
  • 打赏
  • 举报
回复
如果是在linux下呢.
tokens 2003-10-16
  • 打赏
  • 举报
回复
说错了。。是far指针
tokens 2003-10-16
  • 打赏
  • 举报
回复
huge指针。

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧