“PTR”和“NEAR PTR”有什么区别?

What is the difference between “PTR” and “NEAR PTR”?

我正在查找包含“NEAR PTR”的示例,但它们很容易被“PTR”替换。使用“NEAR PTR”有什么优势吗?

NEAR 是 16 位过去的遗产。假设您的代码是 32 位或 64 位,它们是相同的。

这是关于内存段(Wikipedia link 到 x86 32-bit and to 64-bit)。

LABEL statement中,PTR和NEAR PTR都只存储一个没有段的32/64位内存地址。

如果在 64 位 MASM 下编译下一段代码:

_DATA SEGMENT
    justPtr LABEL PTR db
    nearPtr LABEL NEAR PTR db

    justPtrSize dd SIZEOF justPtr
    nearPtrSize dd SIZEOF nearPtr
_DATA ENDS

并在 Visual Studio 调试器下检查大小:

?justPtrSize
8
?nearPtrSize
8

确实PTR占用8字节(64位),和NEAR PTR一样