查询内存位置

g4u*_*r4v 9 c c++ pointers memory-management

假设有一个变量a和一个指向p地址的指针a.

int a;
int *p=&a;
Run Code Online (Sandbox Code Playgroud)

既然我有一个指向变量位置的指针,我知道确切的内存位置(或内存块).

我的问题是:

  1. 给定一个地址,我们可以找到哪个变量正在使用它们吗?(我不认为这是可能的).
  2. 给定一个地址,我们至少可以发现该内存地址所属的内存块有多大.(我知道这是愚蠢但仍然).

Ani*_*han 2

给定一个地址,我们能找到哪个变量正在使用它们吗?

不,这是不可能的。变量指向内存,而不是相反。没有某种方法可以从编译的代码中获取变量名称,除非通过符号表,而读取符号表可能需要搞乱汇编。


给定一个地址,我们至少能找到该内存地址所属的内存块有多大吗?

不,仅凭地址是无法做到这一点的。您可以在取消引用地址后找到sizeof(),但不能从地址本身找到。

  • Sizeof 无法告诉指针所指向的实际内存块的大小。它只能知道指针数据类型的大小,即使指针值为 NULL,它也能做到这一点。 (2认同)