“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一样
我正在查找包含“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一样