指针元数据存储在哪里?

时间:2010-02-03 06:05:40

标签: c++ pointers metadata

可能是我忽略了一些明显的东西,但指针元数据存储在哪里?例如,如果我有一个32位的int指针ptr并且我执行ptr++它知道在内存中前进4个字节。但是,如果我有一个64位的int指针,它知道前进8个字节。那么谁跟踪指针ptr的类型和存储位置?为简单起见,您可以将其限制为C ++。

3 个答案:

答案 0 :(得分:18)

它本身并不存储在任何地方。编译器查看ptr的类型并将++操作转换为正确字节数的增量。

答案 1 :(得分:7)

编译器运行时symbol table。无论你的程序运行,或者更确切地说它隐含在编译器生成的低级代码中。

答案 2 :(得分:2)

它没有存储在任何地方,它是在编译时确定的。实际上,以此代码为例:

int *abc = NULL;
cout << abc + 1; /* Prints sizeof(int) */
cout << (void *)((char *)abc + 1); /* Prints 1. Casting it back to void * is necessary,
           otherwise it will try to dereference it and print as a string. */
相关问题