c++ - 什么是长指针?

标签 c++ c pointers

我正在读一本书,它提到某些数据类型是长指针。只是好奇这意味着什么。谢谢。

最佳答案

一些处理器有两种类型的指针,一个近指针和一个远指针。近指针比远指针窄(因此范围有限)。远指针也可以是长指针。

一些处理器为附近的事物提供相对寻址。长指针可能表示项目不在附近,不能使用相对寻址。

在任何情况下,长指针都是特定于平台的问题,可能无法移植到其他操作系统或平台。

编辑: (进一步解释和使用相对寻址)

地址距离不是高级概念,而是汇编语言概念。 距离是从程序计数器(当前地址或下一个地址)和对象的开始(函数或数据)开始测量的。如果位置大于小相对指针的限制,则需要更长的指针。

示例:给定一个具有 32 位“长”寻址和 8 位相对寻址的系统。相对距离将允许在前向(正值)或前向(负)方向上至少有 127 个字节。如果目标在 1024 字节之外,则必须使用完整的 32 位指针。

这是基于大多数指令和数据都在附近的概念的优化功能。大多数循环在循环开始和循环结束之间的距离很小。这些使用相对寻址来执行。

大多数数据都在附近,无论是数据常量还是变量。更详细地说,数据靠近 或引用点。局部变量放置在堆栈上,相对于帧或基地址。这个基地址是函数执行之前堆栈的开始。因此,可以使用相对于堆栈帧开始的寻址来访问数据。

处理器允许编译器使用专门的指令进行相对(近)寻址。在许多处理器上,使用相对寻址的指令比使用长地址的指令小。因此,处理器需要从指令缓存中获取的指令更少,指令缓存可以容纳更多的指令。

长和短,近和远,寻址可能取决于数据或函数的范围。还涉及其他因素,例如 PIC(位置独立代码)、虚拟内存和分页。

关于c++ - 什么是长指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2315311/

相关文章:

c++ - 关于字符串和函数的问题。

c++ - 编译期间缺少包含 (Cocos2d-x 3.1 + XCode 5.1.1)

c++ - 关于多线程程序的查询

c - 尝试覆盖 'fopen()' 但 GCC 给出 "error: conflicting types for ' fopen'"

c++ - 我可以在我的代码中更改什么以使我的 Quicksort 功能正常工作? (使用结构和数组对姓氏进行排序)

c++ - 用于 C++ 对象持久化的 ORM ODB 是否创建/重新创建 DB

c - 如何修复由 realloc 越界引起的段错误?

c - 在函数之间传递指向结构数组的指针

C 指针 - 作为参数传递的函数指针

c - 在句子中存储指向单词的指针