最近我回答了another question asking for 。My suggestion是
Q: How does a pointer point to an object?
A: The pointer stores the address of that object.但是user R..不同意我向Q建议的A-他说正确的答案是“它是特定的实现”。虽然当前的实现将数字地址存储为指针,但没有理由要做更详细的事情。
当然,我不能不同意,除了为了不同意而存储一个地址之外,还有其他的实现。我非常感兴趣的是,还有哪些其他真正使用过的实现。
除了在整数类型变量中存储地址外,在C++中其他实际使用的指针实现是什么?铸造(特别是dynamic_cast)是如何实现的?
发布于 2010-10-15 07:47:44
您可以使用分段指针,不确定地将内存划分为固定大小(小)的块,然后将其划分为段(块的大集合),固定大小,因此指向对象的指针可以存储为Seg:Block。
+-----------------------------------------------------------+
|Segment 1 (addr: 0x00) |
| +-------------------------------------------------------+ |
| |Block 1|Block 2|Block 3|Block 4|Block 5|Block 6|Block 7| |
| +-------------------------------------------------------+ |
+-----------------------------------------------------------+
|Segment 2 (addr: 0xE0) |
| +-------------------------------------------------------+ |
| |Block 1|Block 2|Block 3|Block 4|Block 5|Block 6|Block 7| |
| +-------------------------------------------------------+ |
+-----------------------------------------------------------+
|Segment 3 (addr: 0x1C0) |
| +-------------------------------------------------------+ |
| |Block 1|Block 2|Block 3|Block 4|Block 5|Block 6|Block 7| |
| +-------------------------------------------------------+ |
+-----------------------------------------------------------+假设我们有指针2:5,每个段是7个块,每个块是32个字节,那么2:5可以通过执行((2 - 1) * (7 * 32)) + (5 * 32)转换成x86类型的指针,这将从第一个段开始就开始执行((2 - 1) * (7 * 32)) + (5 * 32)。
https://stackoverflow.com/questions/3939876
复制相似问题