近和远指针

时间:2010-10-06 06:00:07

标签: c++ c pointers

我们的常用指针(我们通常使用的指针),近指针和远指针之间有什么区别?现在的C / C ++系统中有近端和远端指针的实际用法吗?任何需要使用这些特定指针而不是其他c,c ++语义的实际场景都会非常有用。

2 个答案:

答案 0 :(得分:48)

近端和远端关键字源于英特尔以前的分段存储模型。近指针只能访问原本大约64Kb大小的内存块(称为段),而远指针可能超出该段中的段和偏移量。近指针比远指针要快得多,因此在某些情况下使用它们会得到回报。

现在虚拟内存附近和远指针都没用。

编辑:对不起,如果我没有使用正确的条款,但这是我在当天使用它时记住它的方式: - )

答案 1 :(得分:-1)

在机器体系结构(x86,x64、640kb +内存模型,x32表示保护模式和分段模式,x86表示分段内存)的上下文中说的差不多了

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

如今,只有x86 x32寻址-长指针和x64 64位寻址才具有(永久)地位。是的,Windows x64是由MS VC编译的,它“看到”的方式仍然类似于x86 x32应用程序,仅4Gb内存。因此,默认情况下您不知道Near和Far或其他寻址之间的区别。但是x64目标可以使用其他长类型的指针来寻址内存。

如您所见,如果您没有在不同的指针中“看到” x64上的x32变体,那么在MS VC中就没有实际的情况。只是虚伪。

远离这种实际用途是 LP_STRING-指向字符串的长指针 和 INT_PTR-包含指针值的整数。

首先,您必须了解,CPU和编译器接受一组要使用的指针大小。而且只有他们。如果没有其他编译器/链接器/硬件,您将找不到解决之道。 INT_PTR-仅用于存储长度不超过int的指针(指针的值,其中指针长度不大于int)。 LP_STRING和LP_STRING只是编译器/处理器的长型指针(它们与抽象类和编译器在行为上都不等同于编译器,并且x64可以是Intel很少使用且广泛使用的AMD)。

任何大小的变量都可以是一个指针。

您只需要一个针对AMD x64和LLP(长指针)的实用示例。