但是好象FAR的范围也不能超过1M吧!!!!!!
----------------解决方案--------------------------------------------------------
我不是不信你,而是你说的模糊,
就是32,16位,我还理解成处理器那!!
我也知道这个意思,但是具体的就不太清楚了!!神vLinux飘飘
说的也是很模糊,例如我的编译器有几种内存模式,是不是在不同的模式中才能对他们进行特定的处理
还是说他们根本就和内存模式没有关系那???
那什么时候需要用远指针,什么时候又不需要那????
我申请了远指针,近指针对它们可以在使用时一样处理么???
还有就是如果这个远指针可以进行更大方面的内存处理,我要别的大的内存模式
又有什么用???
数组我可以用远指针,函数也可以!!!!
请明示!!
[此贴子已经被作者于2004-09-16 18:48:42编辑过]
----------------解决方案--------------------------------------------------------
这个涉及地址的知识,地址可表示为: 段址:偏移量
near所表示的指针地址为当前段内偏移量。
far指针采用段址:偏移量的方式指明地址,32位其中前16位是段址,后16位是偏移量。
但是far*只能在段内增减,当增减量超过FFFF时又回到开始部分.
这样又引伸出 huge指针,同样也是32位,但不同的是它避免far指针的不能跨段缺点。
----------------解决方案--------------------------------------------------------
具体的用法可以提一下么,就是说什么时候需要用远指针???
什么时候不需要,原因是什么???还有就是函数远指针什么意思???
----------------解决方案--------------------------------------------------------
原则很简单:
如果需要切换段地址的话,就需要远指针。
简单的说如果程序代码区有多个段(每个段长度:64K),或者数据区有多个段的话,就需要远指针或者函数远指针。
函数远指针就是远过程调用问题,
远过程与近过程断点的设置与恢复(通过栈空间)是不同的:
对于近过程:函数调用或指针引用均压入偏移地址和所使用到的寄存器值,
在恢复时要引用压入栈中的值设置程序运行环境。
对于远过程:函数调用或指针引用,需要压入段地址和偏移地址以及所用到的
寄存器值,同样在恢复时要引用压入栈中的值设置程序运行环境。
要说二者的区别就是,远过程或远指针的引用较近过程或近指针的引用速度慢一些。
建议你最好看看汇编书籍!
并且对于程序区、数据区和堆栈区的安排,不同的编译模式是不同的,根据程序规模选择合适的编译模式是明智的,否则造成程序无法正常运行。
推荐书籍 王士元的《c高级适用程序设计》
不过要求是对于硬件、c和汇编比较熟悉!
说的很概略,不知道你能不能明白!
----------------解决方案--------------------------------------------------------
收到!!!
谢谢!
王士元的《c高级适用程序设计》 我看过,不过是别人的,我现在没有,找书店也没有看到,
目前为止看不到了,你说的我都看过,理论上是了,不过因为没有实际的用过,所以不敢肯定的说,
同时,我的汇编知识越等于0!!!就知道一些理论的东西,要学习才行!
----------------解决方案--------------------------------------------------------
我的《dos编程大全》上有例程,不过,由于我在网吧,所以................!
----------------解决方案--------------------------------------------------------
没听说过far char类型?为什么不是关键字?编译通不过啊?没有far关键字……
[此贴子已经被作者于2004-09-18 19:53:08编辑过]
----------------解决方案--------------------------------------------------------
哦,这样子啊
----------------解决方案--------------------------------------------------------